java - Java - 读取压缩位图
问题描述
我正在寻找读取位图的 RGB 值(或十六进制颜色代码,两者都可以)。
我已经尝试了这两个代码:
File image = serverConfig.get(map.bmp);
BufferedImage buffer = ImageIO.read(image);
dimX = buffer.getWidth();
dimY = buffer.getHeight();
byte[] pixlesB = (byte[]) buffer.getRaster().getDataElements(0, 0, buffer.getWidth(), buffer.getHeight(), null);
这个代码:
File image = serverConfig.get(map.bmp);
BufferedImage buffer = ImageIO.read(image);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(buffer, "bmp", baos );
baos.flush();
byte[] pixlesB = baos.toByteArray();
baos.close();
两者都适用于小位图,但是当我加载大位图时,数据会被压缩,并且数组会返回一堆半随机数。
例如: 绿色像素将读取 2,2,2 而不是 0,255,0 红色像素将读取 5,5,5 而不是 255,0,0 黄色像素将读取 8,8,8 而不是 255,255,0
我使用的位图只包括红色、黄色和绿色。我的问题是,如果不手动检查,我无法知道 2、2、2 与什么颜色相关(我不能这样做,因为它会随每个位图而变化)
我知道位图中有一些元数据指定 2 为绿色,但我不知道如何访问它或使用它将 2 变回 0,255,0
这不是Java 的副本——从图像中获取像素数组,因为它没有提到压缩文件。虽然前段时间我确实问过这个问题,但它只是被重定向到上述网站。
提前致谢!
编辑:只是认为这可能会使问题更清楚。我相信文件被正确读取,它只是被压缩了。我如何解压缩它?
解决方案
如果要将图像读取为位图或 rgb 值,则需要先转换图像的格式。
Jpeg 是一种压缩图像格式,您需要使用工具或库才能读取为 rgb。
检查这个答案: 如何在 TYPE_3BYTE_BGR 中获取 jpeg 图像的 rgb 值?
希望这可以帮助
推荐阅读
- dialogflow-es - 是否可以通过用户输入提示用户输入?
- laravel - 在哪些情况下使用 laravel 护照有一些优势?
- ms-word - 从 Word 互操作字段对象中获取引用的文本
- javascript - Node Js通过一个javascript变量调用从Js文件导出的函数
- oracle - 复制 1.1 亿条数据的 oracle 表最快的方法是什么?
- python - Matplotlib 条形图 - 每当代码重新运行时,x 轴分类变量都会发生变化(Numpy)
- reactjs - React Native - 一起使用 Immer.js 和 SetState 有问题吗?
- android - 在android中通过网络发送消息
- php - 如何使用 PHP 从表单在同一项目中发送 PUT 请求
- javascript - this.value 和 $(this).val() 有什么区别?