Как я могу назначить цветовые коды RGB на WORD? - PullRequest
1 голос
/ 11 марта 2011

Я присваиваю значения цвета буферу кадров дисплея, и этот тип возвращаемого указателя буфера равен BYTE.Но я не могу присвоить ему значение цвета RGB.Это я делаю, чтобы установить расположение пикселей с помощью Directdraw на платформе WINCE. Вот код снимка.

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СЛОВА пока назначение, но это не работает.Я знал, что мне нужно шестнадцатеричное значение для цвета в формате 0x000000 (RGB), но я думаю, что BYTE не может сохранить в нем такое большое значение.

Может кто-нибудь сказать мне, как это сделать?

1 Ответ

1 голос
/ 11 марта 2011

Способ выполнения этого назначения очень зависит от формата пикселя, который вы указали при получении 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-й байт (как в моем примере выше), либо альфа-значение, которое сейчасустановить одно из значений.Опять же: помимо пиксельного формата, порядок байтов в вашем целом числе решает, работает ли это напрямую, или вам нужно выполнить некоторую замену байтов.

...