关于java ByteArrayOutputStream类

时间:2010-11-21 05:34:21

标签: java arrays image processing

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图像作为字节数组。我想知道这个字节数组究竟是什么。此数组是包含任何文件头信息还是仅包含像素值?例如,如果我想要反转这个图像的颜色,那么这样做的好方法是什么? 非常感谢!

3 个答案:

答案 0 :(得分:3)

这是一个完整的JPEG文件,在内存中。

编辑:如果您想将像素数据作为数组进行操作,您可能会发现Raster更有帮助:

E.g:

Raster raster = bufferedImage.getData();

然后,您可以调用其中一种Raster.getPixels方法。

答案 1 :(得分: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"));
}

答案 2 :(得分:0)

ByteArrayOutputStream包含您写入的内容。没有更多,没有更少。所以你的问题是关于ImageIO.write()的真的。根据您提供的编码类型写出图像编码。这是JPEG。