C#中位图图像的灰度变暗问题

时间:2009-07-02 10:52:25

标签: c# image pointers image-processing

我正在将8bppIndexed灰度图像加载到内存中并读取像素值。问题是我从像素获得的值似乎与实际图像不匹配,它们总是更暗。我的图像是一个简单的灰色渐变,如下所示:

alt text

右下角的像素返回191,左上角为0.左上角实际为64,右下角为255.

以下是我加载图片的方式:

Bitmap threshImg = new Bitmap(@"C:\grey.bmp");

检查PixelFormat确认它在Format8bppIndexed中。所以我读了右下角的像素和左上角,如下所示:

BitmapData data = threshImg.LockBits(new Rectangle(0, 0, rectWidth, rectHeight), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
unsafe
{
    byte* pixel = (byte*)data.Scan0.ToPointer();
    int topVal = (int)(byte)pixel[0];
    int bottomVal = (int)(byte)pixel[((threshImg.Height * threshImg.Width)) - 1];
}
threshImg.UnlockBits(data);

如果我将图像转换为24bppRbg(并相应地调整代码),我会在相应的角落中看到正确的颜色值。

任何人都知道为什么我在使用8bppIndexed图像时会变得更暗?

2 个答案:

答案 0 :(得分:3)

8bpp索引图像中的值不是颜色本身(或灰度值)而是索引。尝试在调色板中查找颜色值。

答案 1 :(得分:1)

对于索引图像,只有一定数量的颜色(或者在这种情况下为灰色阴影)可用 - 通常为256.可能没有足够的颜色来获得原始图像中的全部阴影。 / p>

由于具有精确的阴影非常重要,我将转向24bpp图像。