位图跨步和4字节关系?

S.A*_*hid 9 c# image bitmap image-processing

这句话的意思是:

Stride属性,以字节为单位保存一行的宽度.然而,行的大小可能不是像素大小的精确倍数,因为为了提高效率,系统确保将数据打包成以四字节边界开始并填充为四个字节的倍数的行.

Chr*_*s O 9

这意味着如果您的图像宽度为17像素,并且颜色为3个字节,则会得到51个字节.因此,您的图像宽度(以字节为单位)为51个字节,然后步幅为52个字节,即以字节为单位的图像宽度向上舍入到下一个4字节边界.


pli*_*nth 6

Stride是填充的.这意味着它会四舍五入到最接近的4的倍数.(假设8位灰色,或每像素8位):

Width | stride
--------------
1     | 4
2     | 4
3     | 4
4     | 4
5     | 8
6     | 8
7     | 8
8     | 8
9     | 12
10    | 12
11    | 12
12    | 12
Run Code Online (Sandbox Code Playgroud)

等等

在C#中,您可以像这样实现:

static int PaddedRowWidth(int bitsPerPixel, int w, int padToNBytes) 
{
    if (padToNBytes == 0)
        throw new ArgumentOutOfRangeException("padToNBytes", "pad value must be greater than 0.");
    int padBits = 8* padToNBytes;
    return ((w * bitsPerPixel + (padBits-1)) / padBits) * padToNBytes;
}

static int RowStride(int bitsPerPixel, int width) { return PaddedRowWidth(bitsPerPixel, width, 4); }
Run Code Online (Sandbox Code Playgroud)


Ali*_*tad 5

让我给你举个例子:

这意味着如果宽度为160,则步幅为160.但如果宽度为161,则步幅为164.