2010-11-21 74 views
1
BufferedImage bufferedImage = ImageIO.read(new File("/...icon.jpg")); 

// this writes the bufferedImage into a byte array called resultingBytes 
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 

ImageIO.write(bufferedImage, "jpg", byteArrayOut); 

byte[] resultingBytes = byteArrayOut.toByteArray(); 

我使用上面的代碼來獲取JEPG圖像作爲字節數組。我想知道這個字節數組究竟是什麼。這個數組是否包含任何文件頭信息或像素值?例如,如果我想扭轉此圖像的顏色,那麼這樣做的好方法是什麼? 非常感謝!關於java ByteArrayOutputStream類

回答

0

ByteArrayOutputStream包含您寫入的任何內容。沒有更多,沒有更多。所以你的問題是真的關於ImageIO.write()。它根據您提供的編碼類型寫出圖像的編碼。這是JPEG。

3

這是一個完整的JPEG文件,在內存中。

編輯:如果您要處理的像素數據作爲一個數組,你可能會發現Raster更有幫助:

例如爲:

Raster raster = bufferedImage.getData(); 

然後可以調用的Raster.getPixels方法之一。

+0

那麼,我怎樣才能得到真正的像素值? – 2010-11-21 05:40:46

1

下面介紹如何讀取實際像素值。 JPEG信息更難以做任何事情!

public static void main(String... args) throws IOException { 
    String u = "http://blog.stackoverflow.com/wp-content/uploads/stackoverflow-logo-300.png"; 

    BufferedImage old = ImageIO.read(new URL(u)); 
    BufferedImage inverted = new BufferedImage(old.getWidth(), 
               old.getHeight(), 
               BufferedImage.TYPE_INT_RGB); 


    for (int y = 0; y < old.getHeight(); y++) { 
     for (int x = 0; x < old.getWidth(); x++) { 
      Color oldColor = new Color(old.getRGB(x, y)); 

      // reverse all but the alpha channel 
      Color invertedColor = new Color(255 - oldColor.getRed(), 
              255 - oldColor.getGreen(), 
              255 - oldColor.getBlue()); 

      inverted.setRGB(x, y, invertedColor.getRGB()); 
     } 
    } 

    ImageIO.write(inverted, "png", new File("test.png")); 
}