C++ 如何为单词指定RGB颜色代码?

C++ 如何为单词指定RGB颜色代码?,c++,c,winapi,mfc,windows-ce,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

我将颜色值分配给显示帧缓冲区,缓冲区指针返回类型为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(100150100)组合在这里,我尝试在分配时使用DWORD而不是WORD,但它不起作用。我知道我需要0x000000格式(RGB)的颜色的十六进制值,但我认为字节cnt在其中存储了如此大的值


有人能告诉我怎么做吗?

如何完成此分配取决于您在获取
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值,现在设置为其中一个值。同样:除了像素格式之外,整数中字节的顺序也决定了这是直接工作还是必须进行一些字节交换。

如何完成此分配非常取决于您在获取
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值,现在设置为其中一个值。再次强调:除了像素格式之外,整数中字节的顺序也决定了这是直接起作用还是必须进行字节交换。

也许你正在寻找类似的东西?检查“单像素”部分下的示例代码。也许您正在寻找类似的代码?检查“单像素”部分下的示例代码。