代码之家  ›  专栏  ›  技术社区  ›  badbod99

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

  •  1
  • badbod99  · 技术社区  · 15 年前

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

    alt text

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

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

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

    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(并相应地调整代码),我会在各个角落看到正确的颜色值。

    有人知道为什么我在使用8Bppined图像时会得到更暗的值吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Robert Paulson    15 年前

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

        2
  •  1
  •   ChrisF    15 年前

    对于索引图像,只有一定数量的颜色(或在本例中为灰色)可用-通常为256。很可能原始图像中没有足够的阴影来获得完整的阴影范围。

    由于准确的色调很重要,我会选择24bpp的图像。