为什么要从位图的宽度和高度属性中减去1?

时间:2011-04-14 12:47:30

标签: c# .net bitmap

我有以下代码:

public static double[][] GetRgbProjections(Bitmap bitmap)
{
    var width = bitmap.Width - 1;
    var height = bitmap.Height - 1;

    var horizontalProjection = new double[width];
    var verticalProjection = new double[height];

    var bitmapData1 = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

有谁知道bitmap.Width - 1的用途是什么?还bitmap.Height - 1;?为什么要从每个属性值中减去1?

3 个答案:

答案 0 :(得分:2)

WidthHeight属性返回的值为独占,这意味着坐标(宽度,高度)的像素位于的位图边界。

因此,如果要迭代像素,则需要减去一个以获得正确的行数或列数。

当然,很难说出更多。在您显示的代码部分中不会再次使用这些值。

答案 1 :(得分:1)

没有。我们永远不会知道从位图宽度中减去1的目的是什么,因为我们不知道bitmap的上下文。

答案 2 :(得分:0)

这样做的原因是使数组索引与位图的行和高度值匹配。考虑:

你有一个2x2像素的位图。它有4个像素,宽度和高度分别为2。如果你想迭代它,你需要在两个方向(宽度和高度)上从0到1进行迭代,但是如果按位图像素进行迭代,你将在1和2之间进行迭代,这将导致索引超出界限。

就个人而言,我不会从宽度和高度变量中减去一个,但只有在迭代像素数组时才减去,以防止混淆。