位图跨步和4字节关系?

时间:2011-04-20 20:05:15

标签: c# image image-processing bitmap

这句话的意思是:

  

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分: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

在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); }

答案 2 :(得分:5)

让我举个例子:

  

这意味着如果宽度为160,   步幅将是160.但如果宽度是   161,然后步幅将是164。