我正在寻找int[][]从a 获取像素数据(在表单中)的最快方法BufferedImage.我的目标是能够(x, y)使用图像来处理图像中的像素int[x][y].我发现的所有方法都没有这样做(大多数都返回int[]s).
Java中的BufferedImage类包含一个getType()方法,该方法返回与BufferedImage常量类型变量相关的整数,该变量描述有关如何编码图像的一些信息(您可以查看BufferedImage源以确定哪个数字对应于常量类型变量).例如,如果它返回与之对应的整数BufferedImage.TYPE_3BYTE_BGR,则表示BufferedImage是8位RGB图像,没有alpha,蓝色,绿色和黄色各自用3位表示.
其中一些图像类型似乎与特定格式的某些属性相关.例如,TYPE_BYTE_INDEXED它表示它是由"256色6/6/6颜色立方体调色板"创建的.这听起来很像GIF图像,它是由256种颜色创建的.
好奇,我在硬盘上扫描了几百张照片ImageIO.read(File file),然后将BufferedImage.getType()它们转换为BufferedImage ,然后调用它们.我确定只有少数BufferedImage类型是从某些图像类型生成的.结果如下:
JPG: TYPE_3BYTE_BGR,TYPE_BYTE_GRAY
PNG: TYPE_3BYTE_BGR,TYPE_BYTE_GRAY,TYPE_4BYTE_BGRA
GIF: TYPE_BYTE_INDEXED
虽然看起来JPG和PNG共享一些类似的BufferedImage常量类型,但在我的测试中只有一个PNG导致了一个TYPE_4BYTE_BGRA并且每个GIF都产生了一个TYPE_BYTE_INDEXED.
我对图像格式不太熟悉,而且我的样本量并不是那么大.所以我想我会问:假设图像格式正确,某些图像类型是否总是导致具有某些常量类型的BufferedImages?为了提供一个具体的例子,正确格式化的GIF图像是否总是对应于TYPE_BYTE_INDEXED?或者所有格式正确的图像是否可以与所有BufferedImage常量类型相对应?