質問

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画像を取得するために上記のコードを使用します。私は、まさにこのバイト配列であるかを知りたいです。この配列は、任意のファイルのヘッダー情報または単にピクセル値が含まれていますか?私は、この画像の色を反転したい場合は、例えば、そうする良い方法は何ですか? 本当にありがとうございました!

役に立ちましたか?

解決

ByteArrayOutputStreamは、あなたがそれに書いたものは何でも含まれています。何よりも、より少ない何もありません。あなたの質問があるので、の本当にのImageIO.writeについて()。どのユーザーが指定するエンコードの種類に応じて画像のエンコーディングを書き出します。これはJPEGました。

他のヒント

これはメモリ内に、完全なJPEGファイルです。

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

例えば:ます。

Raster raster = bufferedImage.getData();

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

ここでは、実際のピクセル値を読み取る方法です。 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"));
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top