2010-07-19 65 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)加載圖像。