我对ByteArrayOutputStream有一个奇怪的问题。我正在尝试输入图像并将其转换为字节数组。图像为270 x 480像素。但是,如果将数据设置为字节数组并输出data.length,则得到21195,但是270 x 480 =129600。它们不应该相同吗?我在这里做错了什么?
BufferedImage originalImage =
ImageIO.read(new File("C:\\Users\\use\\Pictures\\mypic.jpg"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( originalImage, "jpg", baos );
baos.flush();
data = baos.toByteArray();
baos.close();
谢谢,
最佳答案
如果每个像素仅消耗一个字节以图像格式存储,那您是对的。实际上并非如此。
不同的文件格式对于像素具有不同的存储成本。
对于纯黑白(不是灰度)图像,每个像素只需要一点。
在具有透明性的PNG图像中,除了红色,绿色和蓝色分量外,每个像素还包含alpha分量(透明度/不透明度)。因此,图像表示中的字节数取决于图像格式和压缩率。BufferedImage
类使您可以按其位置操纵任何像素。
try {
BufferedImage img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
}
您可以使用
getRGB(int x, int y)
和setRGB(int x, int y)
方法来获取或设置指定的像素。