我使用下面的代码将图像转换为数组。但是我无法理解像素在数组中是如何表示的,因为数组是一维的,而图像是像素的网格。我也无法理解数组中获得的值的含义。
WritableRaster raster = bufferedImage .getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
byte[] b=data.getData();
附言-我是Java的新手
编辑:字节数组的大小是多少
TYPE_BYTE_GRAY
BufferedImage
将表示为字节的一维数组。
因此,像素值将进入[-128,127]的范围,如果您需要使该值在[0,256]范围内,则必须使用b[i] & 0xFF
。
现在,对于所有不同的BufferedImage
类型,DataBuffer
始终是一个 1D 数组,其中包含一个接一个放置的行。因此,而不是像这样的经典 2D 数组
P1 P2 P3
小四 小五 小六
P7 P8 P9
你将拥有
P1 P2 P3 P4 P5 P6 P7 P8 P9
因此,DataBuffer(在本例中为字节数组)的大小是width x height
,因此在您的示例中,b.length
等于bufferedImage.getWidth()* bufferedImage.getHeight()
如果您的图像类型为 TYPE_3BYTE_BGR
,则其编码方式如下:
B1 G1R1 B2 G2 R2 B3 G3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 R9
那么数据缓冲区的大小是 3 x width x height
。