当我们使用可写栅格从缓冲图像获取字节数组时,图像如何以数组格式表示



我使用下面的代码将图像转换为数组。但是我无法理解像素在数组中是如何表示的,因为数组是一维的,而图像是像素的网格。我也无法理解数组中获得的值的含义。

 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 G1

R1 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

最新更新