2015-12-22 3 views
0

Я пишу PNG-изображение со значениями 15 для каждого пикселя. Когда я читаю написанное изображение, вместо 15 я получаю ненужные значения. Почему это так? Поскольку я хотел восстановить одни и те же значения, я выбрал формат PNG без потерь. Тем не менее, я получаю ненужные значения. Вот код.Почему значения нежелательных сообщений при чтении png изображения

public static void main(String args[]) 
    { 
     BufferedImage img = new BufferedImage(512, 512, BufferedImage.TYPE_INT_RGB); 

     int[] RGBarray = null; 
     int col = 0; 
     int row = 0; 

     col = img.getWidth(); 
     row = img.getHeight(); 
     RGBarray = img.getRGB(0,0,col,row,null,0,col); // Now RGBarray has all the values 

     byte[] data = new byte[512*512]; 

     for(int k = 0; k < 262144; k++) 
     { 

       data[k] = 15; 

     } 

     int count = 0; 
     for(int ro = 0; ro < 512 ; ro++) 
     { 
      for(int co = 0;co < 512; co++) 
      { 
       img.setRGB(co, ro, data[count++]); 
      } 
     } 

     try{ 
       ImageIO.write(img, "png", new File("Test3.png")); 
      } 
     catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
    BufferedImage img1 = null; 

    File f = new File("Test3.png"); 
    try 
    { 
     img1 = ImageIO.read(f); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

     int[] RGBarray1 = null; 
     int col1 = 0; 
     int row1 = 0; 

     col1 = img1.getWidth(); 
     row1 = img1.getHeight(); 
     RGBarray1 = img1.getRGB(0,0,col1,row1,null,0,col1); // Now RGBarray has all the values 

     for(int p = 0; p < 5; p++) 
     { 
      for(int j = 0; j < 5 ; j++) 
      { 
       System.out.print(img1.getRGB(p,j) + "\t"); 
      } 
      System.out.println(""); 
     } 
    } 

Только для справки Я напечатал пять значений, чтобы проверить, получу ли я 15 или нет. Но выход -16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 -16777216
-16777216 -16777216 -16777216 -16777216 - 16777216
-16777216 -16777216 -16777216 -16777216 -16777216

+0

Можете ли вы сократить это до минимального примера? например нет необходимости создавать 512x512 изображение байтов, копировать их в изображение, а затем извлекать бит 5x5; почему бы просто не сделать изображение 1x1, не создавая 'data', а затем посмотреть, имеет ли один пиксель одно и то же значение« нежелательной »? –

ответ

1

Вы пишете byte и чтение int. Попробуйте это -

System.out.print((byte)img1.getRGB(p,j) + "\t"); 
+0

Спасибо @TDG. Это сработало. –

Смежные вопросы