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

4

3 に答える 3

3

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

編集:ピクセルデータを配列として操作したい場合は、Rasterもっと役立つかもしれません:

例えば:

Raster raster = bufferedImage.getData();

次に、メソッドの1つを呼び出すことができRaster.getPixelsます。

于 2010-11-21T05:38:50.587 に答える
0

ByteArrayOutputStreamには、書き込んだものがすべて含まれています。それ以上でもそれ以下でもありません。だからあなたの質問は本当にImageIO.write()についてです。指定したエンコーディングタイプに応じて画像のエンコーディングを書き出します。これはJPEGでした。

于 2010-11-21T08:07:29.000 に答える
0

実際のピクセル値を読み取る方法は次のとおりです。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"));
}
于 2010-11-21T08:33:25.493 に答える