首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteArrayOutputStream长度<宽度*高度

ByteArrayOutputStream长度<宽度*高度
EN

Stack Overflow用户
提问于 2016-10-18 00:11:28
回答 2查看 692关注 0票数 1

我对ByteArrayOutputStream有一个奇怪的问题。我正在尝试输入图像并将其转换为字节数组。图像为270x480像素。但是,如果我将data设置为字节数组并输出data.length,则会得到21195,但是270x480= 129600。它们不应该是一样的吗?我在这里做错了什么?

代码语言:javascript
复制
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();

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2016-10-18 01:19:55

如果每个像素只消耗一个字节用于图像格式的存储,那么您就是对的。事实并非如此。

对于一个像素,不同的文件格式有不同的存储成本。

对于纯黑白(非灰度)图像,每个像素只需要一点。

在具有透明度的PNG图像中,除了红色、绿色和蓝色分量外,每个像素还包含alpha分量(透明度/不透明度)。因此,图像表示中的字节数取决于图像格式和压缩。

BufferedImage类允许您根据像素的位置来操作任何像素。

代码语言:javascript
复制
try {
  BufferedImage img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
}

您可以使用getRGB(int x, int y)setRGB(int x, int y)方法来获取或设置指定的像素。

票数 1
EN

Stack Overflow用户

发布于 2016-10-18 05:33:22

只有当你的图像是二进制的时候,length < width * height才会发生,所以如果类型是TYPE_BYTE_BINARY。在这种情况下,编码/存储是逐行完成的,图像中字节元素的数量就是[width/8 + min(width%8, 1) ] * height

在具有多通道/频带的图像的情况下,它可能更好,因此彩色图像也是如此。

在将图像转换为字节之前,请确保图像是使用ByteArrayOutputStream进行编码的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40091091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档