2010-11-21 8 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ファイルで、メモリに保存されています。

EDIT:あなたは配列としてピクセルデータを操作したい場合は、Rasterがより便利かもしれません:

例えば:

Raster raster = bufferedImage.getData(); 

あなたはその後、Raster.getPixelsの方法のいずれかを呼び出すことができます。

+0

どのようにして実際のピクセル値を得ることができますか? –

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")); 
} 
関連する問題