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

标签 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 图像时会得到较暗的值吗?

最佳答案

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

关于c# - C#中位图图像的灰度变暗问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073706/

相关文章:

java - 如何在 Graphics 方法 drawImage() 中使用 ImageObserver

c# - float* 从 C 到 C#

c - 使用双指针对字符串中的字母进行排序

c# - 如何自定义MessageBox提示?

c# - 在 TreeView 中查找特定的树节点

c# - 如何判断方法返回哪个接口(interface)

c# - 如何从 Controller 方法返回多个图像?

objective-c - 状态栏应用程序图像在运行时拉伸(stretch)。怎么修?

c - 为什么这个函数不增加我在 c 中的变量?

css - 相同高度的列,内部有响应图像