2010-07-19 69 views
1

我有一个24位的BMP图像,但是当我使用位图对象将其加载到我的Pocket PC上并执行GetPixel时,它会返回稍微错误的RGB值。我想它会将它转换为16位。当使用LockBits并直接处理位图数据时,我会得到相同的结果。在.NET Compact Framework中,是否有任何方法可以获得24位BMP的给定像素的精确RGB值?如何在.NET Compact Framework中获取24位图像的精确RGB值?

在此先感谢。

+0

您能否告诉我们它会返回什么值,以及您期望的RGB值? – Andres 2010-07-21 13:22:55

+0

例如我期待它为255/255/255返回白色,并返回248/252/248。现在我清楚地看到这是一个16位表示(5/6/5位),但是我仍然不知道如何获得255/255/255 ... – Constantine 2010-07-22 07:38:04

回答

0

胡姆,有趣!

我不确定我会说什么,但如果它有16位颜色,它应该有一个调色板来表示完整的真彩色(32位)。在这种情况下,您获得的“颜色”(16位像素值)是调色板的索引。 Bitmap对象有一个Palette属性,也许值得一看,运行一些测试,看看我说的是否合理!

问候

Bitmap class

Palette property

+0

图像是24位颜色,但它似乎在加载到位图对象时自动转换为16位颜色。尽管此位图的像素格式为24位颜色,但它在调用GetPixel时会返回截断的RGB值。 – Constantine 2010-07-23 06:30:47

0

我敢打赌,但加载了位图得到它翻译成DDB和驱动器设置为使用24位色,这就是你结束了。如果你想保持32位颜色,你需要使用DIB。对于精简框架来说,这意味着使用流构造函数(see this blog entry for more on DDB/DIB in the CF)加载图像。