Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.xml.crypto.Data;
- import java.awt.*;
- import java.io.*;
- import java.net.URL;
- import java.net.URLConnection;
- import java.net.URLStreamHandler;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- public class Pilt {
- int laius;
- int kõrgus;
- String aadress;
- int[][][]pilt;
- public Pilt(int laius, int kõrgus) {
- this.laius = laius;
- this.kõrgus = kõrgus;
- if (laius==0 || kõrgus==0){
- throw new RuntimeException();
- }
- pilt=new int[laius][kõrgus][3];
- for (int i=0;i<laius;i++){
- for (int j=0;j<kõrgus;j++){
- pilt[i][j][0]=0;
- pilt[i][j][1]=0;
- pilt[i][j][2]=0;
- }
- }
- }
- private String muudaAsciiks(String sisend){
- StringBuilder väljund=new StringBuilder("");
- for (int i=0;i<sisend.length();i+=2){
- String sõne=sisend.substring(i,i+2);
- väljund.append((char)Integer.parseInt(sõne,16));
- }
- return väljund.toString();
- }
- public Pilt(String aadress) throws IOException {
- this.aadress = aadress;
- DataInputStream data;
- if (aadress.startsWith("http")){
- URL url=new URL(aadress);
- URLConnection ühendus=url.openConnection();
- data=new DataInputStream(ühendus.getInputStream());
- }else {
- data = new DataInputStream(new FileInputStream(aadress));
- }
- List<String> andmed=new ArrayList<>();
- while (true) {
- andmed.add(Integer.toHexString(data.read()));
- if (andmed.contains("ffffffff")){
- andmed.remove(andmed.size()-1);
- break;
- }
- }
- if (!(muudaAsciiks(andmed.get(0))+muudaAsciiks(andmed.get(1))).equals("P6")){
- throw new RuntimeException("Vale märgend faili alguses");
- }
- String pikslid="";
- for (int i=3;i<andmed.size();i++){
- if (andmed.get(i).equals("a")){
- break;
- }
- pikslid+=muudaAsciiks(andmed.get(i));
- }
- String[]laiuskõrgus=pikslid.split(" ");
- int laius=Integer.parseInt(laiuskõrgus[0]);
- this.laius=laius;
- int kõrgus=Integer.parseInt(laiuskõrgus[1]);
- this.kõrgus=kõrgus;
- String värvikontroll="";
- for (int i=0;i<andmed.size();i++){
- värvikontroll+=andmed.get(i);
- }
- String[] värvid=värvikontroll.split("a");
- if (!värvid[2].equals("323535")){
- throw new RuntimeException("Vale värvi sügavus");
- }
- List<String>pikslikontroll=new ArrayList<>();
- pikslikontroll.addAll(andmed);
- while (pikslikontroll.contains("a")){
- pikslikontroll.remove(0);
- }
- if (pikslikontroll.size()>(laius*kõrgus)*3){
- throw new RuntimeException("Failis on peale piksleid veel midagi");
- }
- pilt=new int[laius][kõrgus][3];
- for (int j = 0; j < this.kõrgus; j++) {
- for (int i=0;i<this.laius;i++) {
- pilt[i][j][0]=Integer.parseInt(pikslikontroll.get(0),16);
- pikslikontroll.remove(0);
- pilt[i][j][1]=Integer.parseInt(pikslikontroll.get(0),16);
- pikslikontroll.remove(0);
- pilt[i][j][2]=Integer.parseInt(pikslikontroll.get(0),16);
- pikslikontroll.remove(0);
- }
- }
- }
- public int annaLaius() {
- return laius;
- }
- public int annaKõrgus() {
- return kõrgus;
- }
- void määraPiksel(int x,int y,int punane,int roheline,int sinine){
- if (x>laius || y>kõrgus || x<0 || y<0){
- throw new RuntimeException();
- }
- if (String.valueOf(punane).contains("x")) {
- punane = Integer.parseInt(String.valueOf(punane), 16);
- }
- if (String.valueOf(roheline).contains("x")) {
- roheline = Integer.parseInt(String.valueOf(roheline), 16);
- }
- if (String.valueOf(sinine).contains("x")) {
- sinine = Integer.parseInt(String.valueOf(sinine), 16);
- }
- pilt[x][y][0]=punane;
- pilt[x][y][1]=roheline;
- pilt[x][y][2]=sinine;
- }
- void määraPiksel(int x,int y,int[] värv){
- if (x>laius || y>kõrgus || x<0 || y<0){
- throw new RuntimeException();
- }
- if (String.valueOf(värv[0]).contains("x")) {
- värv[0] = Integer.parseInt(String.valueOf(värv[0]), 16);
- }
- if (String.valueOf(värv[1]).contains("x")) {
- värv[1] = Integer.parseInt(String.valueOf(värv[1]), 16);
- }
- if (String.valueOf(värv[2]).contains("x")) {
- värv[2] = Integer.parseInt(String.valueOf(värv[2]), 16);
- }
- pilt[x][y][0]=värv[0];
- pilt[x][y][1]=värv[1];
- pilt[x][y][2]=värv[2];
- }
- int[] annaPiksel(int x,int y){
- if (x>laius || y>kõrgus || x<0 || y<0){
- throw new RuntimeException();
- }
- return pilt[x][y];
- }
- void salvesta(String failinimi) throws IOException{
- DataOutputStream väljund=new DataOutputStream(new FileOutputStream(failinimi));
- väljund.writeBytes("P6\n");
- väljund.writeBytes(laius+" "+kõrgus+"\n");
- väljund.writeBytes("255\n");
- for (int j=0;j<kõrgus;j++){
- for (int i=0;i<laius;i++){
- väljund.write(pilt[i][j][0]);
- väljund.write(pilt[i][j][1]);
- väljund.write(pilt[i][j][2]);
- }
- }
- väljund.flush();
- väljund.close();
- }
- public static void main(String[] args) throws IOException{
- int[] must={0x00,0x00,0x00};
- int[] hall={0x09, 0x09, 0x09};
- Pilt pilt=new Pilt("demo.ppm");
- System.out.println(Arrays.toString(pilt.annaPiksel(1, 10)));
- pilt.salvesta("demo_out.ppm");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement