RowStride 和 PixelStride 的区别
RowStride
(行步长)和 PixelStride
(像素步长)是两个重要的概念,用于描述图像数据在内存中的布局。
RowStride (行步长)
RowStride
是指在图像数据中,从一行的起始位置到下一行的起始位置之间的字节数。它定义了图像数据中每行在内存中的长度。这通常用于处理非连续的图像数据,即每行可能包含一些填充字节,以便对齐到某个边界(例如4字节、8字节对齐)。
示例:
假设一个图像的宽度为3个像素,每个像素占用3个字节(例如RGB图像)。如果图像没有任何填充,那么 RowStride
就是 3 * 3 = 9 个字节。然而,如果图像数据在每行末尾有1个字节的填充,那么 RowStride
将是 10 个字节。
| R1 G1 B1 | R2 G2 B2 | R3 G3 B3 | P |
| R4 G4 B4 | R5 G5 B5 | R6 G6 B6 | P |
PixelStride (像素步长)
PixelStride
是指在图像数据中,从一个像素的起始位置到下一个像素的起始位置之间的字节数。它定义了每个像素在内存中的跨度。这通常用于处理带有额外通道(如alpha通道)或间隔数据的图像。
示例:
假设一个图像的每个像素占用3个字节(例如RGB图像),那么 PixelStride
就是3个字节。如果图像数据中每个像素后面有一个填充字节(例如RGBA图像,其中A表示Alpha通道),那么 PixelStride
将是4个字节。
| R1 G1 B1 A1 | R2 G2 B2 A2 | R3 G3 B3 A3 |
总结
- RowStride(行步长):从一行的起始位置到下一行的起始位置之间的字节数。它通常用于处理每行末尾的填充数据,以对齐行数据。
- PixelStride(像素步长):从一个像素的起始位置到下一个像素的起始位置之间的字节数。它通常用于处理每个像素包含的多个通道(例如RGB、RGBA)或额外的填充数据。