2013-03-28 143 views
2

我正在读取一个8位png文件到C#.net 3.5中的位图。当通过像paint.net这样的普通程序读取图像时,我将图像上的特定像素作为RGB值255,255,255(即白色)。然而,当我通过GetPixel方法读取它或通过锁定位并访问它时,指针方式都会产生62,62,62或单字节颜色值62的结果。所以,我的问题是,为什么我得到62而不是255的价值?C#位图从像素读取不正确的颜色

任何洞察力将是伟大的:D。

+2

某些代码会帮助... – 2013-03-28 05:08:16

+0

加载它时,您是否指定了正确的位图PixelFormat? – Kohanz 2013-03-28 17:13:02

+0

@SimonWhitehead:我试图编写代码,这样代码就没有必要了,我相信这是我理解背后的理论而不是代码本身的问题。 – iambeanie 2013-04-01 23:04:54

回答

2

听起来像你的屏幕设置为16位颜色深度。这意味着每个像素由16位描述:5红,6绿,5蓝,每个通道值范围从0到31(2^5-1)或63(2^6-1)。你的白色像素表示为(31,63,31),大概会被调整为(62,62,62)。

像Paint.Net这样的程序执行自己的位图处理,不依赖于系统的Bitmap类,因此它们不依赖于屏幕的颜色深度。

因此,尝试将屏幕设置为32位颜色深度 - 您的像素将表示为(255,255,255)。请注意,在32位颜色深度中,通常只有24位用于颜色通道 - 最后8位是Alpha(透明度)或未使用。

+0

感谢Jonathon,这已经为我解决了。但是,这确实带来了一系列新问题,但我会看到我的走向。 – iambeanie 2013-04-01 23:06:39