DirectX устанавливает цвет одного пикселя - PullRequest
6 голосов
/ 19 марта 2011

Я прочитал в другой ветке, что я могу прочитать один пиксель с помощью Texture.Lock / Unlock, но мне нужно записать пиксели обратно в текстуру после их чтения, это мой код до сих пор

unsigned int readPixel(LPDIRECT3DTEXTURE9 pTexture, UINT x, UINT y)
{
    D3DLOCKED_RECT rect;
    ZeroMemory(&rect, sizeof(D3DLOCKED_RECT));
    pTexture->LockRect(0, &rect, NULL, D3DLOCK_READONLY);
    unsigned char *bits = (unsigned char *)rect.pBits;
    unsigned int pixel = (unsigned int)&bits[rect.Pitch * y + 4 * x];
    pTexture->UnlockRect(0);
    return pixel;
}

Итак, мои вопросы:

- How to write the pixels back to the texture?  
- How to get the ARGB values from this unsigned int? 

((BYTE) x >> 16.08.24) у меня не сработало (возвращаемое значение из функции было 688)

1 Ответ

5 голосов
/ 21 марта 2011

1) Один из способов - использовать memcpy:

memcpy( &bits[rect.Pitch * y + 4 * x]), &pixel, 4 );

2) Есть несколько разных способов. Проще всего определить структуру следующим образом:

struct ARGB
{
    char b;
    char g;
    char r;
    char a;
};

Затем измените свой код загрузки пикселей на следующий:

ARGB pixel;
memcpy( &pixel, &bits[rect.Pitch * y + 4 * x]), 4 );

char red = pixel.r;

Вы также можете получить все значения, используя маски и смены. * 1010 например *

unsigned char a = (intPixel >> 24);
unsigned char r = (intPixel >> 16) & 0xff;
unsigned char g = (intPixel >>  8) & 0xff;
unsigned char b = (intPixel)       & 0xff;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...