我想读取位图的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,而不是0255,0红色像素的读数为5,5,5,而不是255,0,0黄色像素将读取8,8,8,而不是255255,0
我使用的位图只包括红色、黄色和绿色。我的问题是,如果不手动检查颜色2,2,2,我就无法知道它与什么颜色有关(我不能这样做,因为它随每个位图而变化(
我知道位图中有一些元数据指定2为绿色,但我不知道如何访问它或使用它将2变回0255,0
这并不是Java从图像中获取像素数组的复制,因为它并没有提到压缩文件。虽然我之前确实问过这个问题,但它只是被重定向到了上面的网站。
提前感谢!
编辑:我只是觉得这可能会让问题更清楚一些。我相信文件被正确读取了,它只是被压缩了。如何解压缩?
如果要将图像读取为位图或rgb值,则需要首先转换图像的格式。
Jpeg是一种压缩图像格式,您需要使用工具或库才能读取为rgb。
检查此答案:如何在TYPE_3BYTE_BGR中获取jpeg图像的rgb值?
希望这能帮助