Advertisement
Guest User

Pilt

a guest
May 20th, 2018
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.00 KB | None | 0 0
  1. import javax.xml.crypto.Data;
  2. import java.awt.*;
  3. import java.io.*;
  4. import java.net.URL;
  5. import java.net.URLConnection;
  6. import java.net.URLStreamHandler;
  7. import java.util.ArrayList;
  8. import java.util.Arrays;
  9. import java.util.List;
  10.  
  11. public class Pilt {
  12.     int laius;
  13.     int kõrgus;
  14.     String aadress;
  15.     int[][][]pilt;
  16.  
  17.     public Pilt(int laius, int kõrgus) {
  18.         this.laius = laius;
  19.         this.kõrgus = kõrgus;
  20.         if (laius==0 || kõrgus==0){
  21.             throw new RuntimeException();
  22.         }
  23.         pilt=new int[laius][kõrgus][3];
  24.         for (int i=0;i<laius;i++){
  25.             for (int j=0;j<kõrgus;j++){
  26.                 pilt[i][j][0]=0;
  27.                 pilt[i][j][1]=0;
  28.                 pilt[i][j][2]=0;
  29.             }
  30.         }
  31.     }
  32.  
  33.     private String muudaAsciiks(String sisend){
  34.         StringBuilder väljund=new StringBuilder("");
  35.         for (int i=0;i<sisend.length();i+=2){
  36.             String sõne=sisend.substring(i,i+2);
  37.             väljund.append((char)Integer.parseInt(sõne,16));
  38.         }
  39.         return väljund.toString();
  40.     }
  41.  
  42.     public Pilt(String aadress) throws IOException {
  43.         this.aadress = aadress;
  44.         DataInputStream data;
  45.         if (aadress.startsWith("http")){
  46.             URL url=new URL(aadress);
  47.             URLConnection ühendus=url.openConnection();
  48.             data=new DataInputStream(ühendus.getInputStream());
  49.         }else {
  50.             data = new DataInputStream(new FileInputStream(aadress));
  51.         }
  52.         List<String> andmed=new ArrayList<>();
  53.         while (true) {
  54.             andmed.add(Integer.toHexString(data.read()));
  55.             if (andmed.contains("ffffffff")){
  56.                 andmed.remove(andmed.size()-1);
  57.                 break;
  58.             }
  59.         }
  60.         if (!(muudaAsciiks(andmed.get(0))+muudaAsciiks(andmed.get(1))).equals("P6")){
  61.             throw new RuntimeException("Vale märgend faili alguses");
  62.         }
  63.         String pikslid="";
  64.         for (int i=3;i<andmed.size();i++){
  65.             if (andmed.get(i).equals("a")){
  66.                 break;
  67.             }
  68.             pikslid+=muudaAsciiks(andmed.get(i));
  69.         }
  70.         String[]laiuskõrgus=pikslid.split(" ");
  71.         int laius=Integer.parseInt(laiuskõrgus[0]);
  72.         this.laius=laius;
  73.         int kõrgus=Integer.parseInt(laiuskõrgus[1]);
  74.         this.kõrgus=kõrgus;
  75.         String värvikontroll="";
  76.         for (int i=0;i<andmed.size();i++){
  77.             värvikontroll+=andmed.get(i);
  78.         }
  79.         String[] värvid=värvikontroll.split("a");
  80.         if (!värvid[2].equals("323535")){
  81.             throw new RuntimeException("Vale värvi sügavus");
  82.         }
  83.         List<String>pikslikontroll=new ArrayList<>();
  84.         pikslikontroll.addAll(andmed);
  85.         while (pikslikontroll.contains("a")){
  86.             pikslikontroll.remove(0);
  87.         }
  88.         if (pikslikontroll.size()>(laius*kõrgus)*3){
  89.             throw new RuntimeException("Failis on peale piksleid veel midagi");
  90.         }
  91.         pilt=new int[laius][kõrgus][3];
  92.         for (int j = 0; j < this.kõrgus; j++) {
  93.             for (int i=0;i<this.laius;i++) {
  94.                 pilt[i][j][0]=Integer.parseInt(pikslikontroll.get(0),16);
  95.                 pikslikontroll.remove(0);
  96.                 pilt[i][j][1]=Integer.parseInt(pikslikontroll.get(0),16);
  97.                 pikslikontroll.remove(0);
  98.                 pilt[i][j][2]=Integer.parseInt(pikslikontroll.get(0),16);
  99.                 pikslikontroll.remove(0);
  100.             }
  101.         }
  102.  
  103.     }
  104.  
  105.     public int annaLaius() {
  106.         return laius;
  107.     }
  108.  
  109.     public int annaKõrgus() {
  110.         return kõrgus;
  111.     }
  112.  
  113.     void määraPiksel(int x,int y,int punane,int roheline,int sinine){
  114.         if (x>laius || y>kõrgus || x<0 || y<0){
  115.             throw new RuntimeException();
  116.         }
  117.         if (String.valueOf(punane).contains("x")) {
  118.             punane = Integer.parseInt(String.valueOf(punane), 16);
  119.         }
  120.         if (String.valueOf(roheline).contains("x")) {
  121.             roheline = Integer.parseInt(String.valueOf(roheline), 16);
  122.         }
  123.         if (String.valueOf(sinine).contains("x")) {
  124.             sinine = Integer.parseInt(String.valueOf(sinine), 16);
  125.         }
  126.         pilt[x][y][0]=punane;
  127.         pilt[x][y][1]=roheline;
  128.         pilt[x][y][2]=sinine;
  129.     }
  130.  
  131.     void määraPiksel(int x,int y,int[] värv){
  132.         if (x>laius || y>kõrgus || x<0 || y<0){
  133.             throw new RuntimeException();
  134.         }
  135.         if (String.valueOf(värv[0]).contains("x")) {
  136.             värv[0] = Integer.parseInt(String.valueOf(värv[0]), 16);
  137.         }
  138.         if (String.valueOf(värv[1]).contains("x")) {
  139.             värv[1] = Integer.parseInt(String.valueOf(värv[1]), 16);
  140.         }
  141.         if (String.valueOf(värv[2]).contains("x")) {
  142.             värv[2] = Integer.parseInt(String.valueOf(värv[2]), 16);
  143.         }
  144.         pilt[x][y][0]=värv[0];
  145.         pilt[x][y][1]=värv[1];
  146.         pilt[x][y][2]=värv[2];
  147.     }
  148.  
  149.     int[] annaPiksel(int x,int y){
  150.         if (x>laius || y>kõrgus || x<0 || y<0){
  151.             throw new RuntimeException();
  152.         }
  153.         return pilt[x][y];
  154.     }
  155.  
  156.     void salvesta(String failinimi) throws IOException{
  157.         DataOutputStream väljund=new DataOutputStream(new FileOutputStream(failinimi));
  158.         väljund.writeBytes("P6\n");
  159.         väljund.writeBytes(laius+" "+kõrgus+"\n");
  160.         väljund.writeBytes("255\n");
  161.         for (int j=0;j<kõrgus;j++){
  162.             for (int i=0;i<laius;i++){
  163.                 väljund.write(pilt[i][j][0]);
  164.                 väljund.write(pilt[i][j][1]);
  165.                 väljund.write(pilt[i][j][2]);
  166.             }
  167.         }
  168.         väljund.flush();
  169.         väljund.close();
  170.     }
  171.  
  172.     public static void main(String[] args) throws IOException{
  173.         int[] must={0x00,0x00,0x00};
  174.         int[] hall={0x09, 0x09, 0x09};
  175.         Pilt pilt=new Pilt("demo.ppm");
  176.         System.out.println(Arrays.toString(pilt.annaPiksel(1, 10)));
  177.         pilt.salvesta("demo_out.ppm");
  178.     }
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement