如何将RGB颜色代码分配给WORD?

时间:2011-03-11 09:47:54

标签: c++ c winapi mfc windows-ce

我将颜色值分配给显示帧缓冲区,缓冲区指针返回类型是BYTE。但我无法将RGB颜色值分配给它。我这样做是为了在WINCE平台上使用directdraw设置像素位置。这是快照代码。

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

int x = 100;

int y = 100;

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

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

但是我怎么能在这里分配RGB(100,150,100)组合,我试图在分配时把DWORD代替WORD但是它干掉了。我知道我需要0x000000格式(RGB)的颜色的十六进制值,但我认为BYTE cnt存储了这么大的值。

谁能告诉我怎么做?

1 个答案:

答案 0 :(得分: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个字节(如上面的例子)或现在设置为其中一个值的alpha值。再说一遍:除了像素格式之外,整数中字节的排序决定了这是否直接起作用,或者你是否必须进行一些字节交换。