2011-03-11 74 views
1

我將顏色值分配給顯示幀緩衝區,並且該緩衝區指針返回類型是BYTE。但我無法將RGB顏色值分配給它。我正在使用WINCE平臺上的directdraw設置像素位置。這裏是快照代碼。如何將RGB顏色代碼分配給WORD?

BYTE* pDisplayMemOffset = (BYTE*) ddsd.lpSurface; 

int x = 100; 

int y = 100; 

pDisplayMemOffset += x*ddds.lXPitch + y*ddds.lPitch ; 

***(WORD*)pDisplayMemOffset = 0x0f00; 

但我怎麼可以在這個指定的RGB(100150100)的組合,我試圖把DWORD而不是字,而分配新建分配FY但desnt工作。我knw我需要0x000000格式(RGB)顏色的十六進制值,但我認爲BYTE cnt存儲如此大的價值。

誰能告訴我如何做到這一點?

+0

也許像[this](http://www3.telus.net/alexander_russell/course_dx/chapter_2_dx.htm)是你在找什麼?檢查「單像素」部分下的示例代碼。 – 2011-03-11 09:52:07

回答

1

如何完成此任務很大程度上取決於您在獲取ddsd時指定的像素格式。請參閱字段ddpfPixelFormat,也特別在此處:dwRGBBitCount

也許你可以提供此像素格式信息,以便我可以改善我的答案。但是,我可以很容易地給你舉例說明你如何進行這種像素顏色分配,例如,像素格式爲:

[1 byte red] [1 byte green] [1 byte blue] [1 byte unused] 

這裏的例子:

*(pDisplayMemOffset+0) = 0x10;// asigning 0x10 to the red-value of first pixel 
*(pDisplayMemOffset+1) = 123; // asigning 123 to green-value of first pixel 
           // (no need for hex) 
*(pDisplayMemOffset+4) = 200; // asigning 200 to red-value of second pixel 
           // (BYTE is unsigned) 

如果你不得不從它在很大程度上取決於一個整數哪個字節順序和顏色訂購該整數是提取顏色值給出,但你可以輕鬆地嘗試。

首先,我會嘗試這個辦法:

*(((unsigned int*)pDisplayMemOffset)+0) = 0x1A2A3A4A 
*(((unsigned int*)pDisplayMemOffset)+1) = 0x1B2B3B4B 

如果一切正常,那麼像素格式有任何未使用的4個字節(就像我上面的例子),或與現在設置爲一個α-值價值。再次說明:除了像素格式之外,整數中字節的排序決定了這是否直接起作用,或者是否需要進行一些字節交換。