Как установить цвет пикселя на 24-битной SDL_Surface? - PullRequest
0 голосов
/ 31 октября 2018

Я пытался установить цвет пикселя, используя эту функцию:

void set_pixel(SDL_Surface *surface, SDL_Color, int x, int y)
{
    Uint32 pixel= SDL_MapRGB(surface->format, color.r, color.g, color.b);
    Uint32 *target_pixel = (Uint8 *) surface->pixels + y * surface->pitch +
                                                 x * sizeof *target_pixel;
    *target_pixel = pixel;
}

К сожалению, это не работает, я думаю, это потому, что мой SDL_Surface имеет 24 бит на пиксель, а SDL_MapRGB возвращает Uint32. Должен ли я конвертировать SDL_Surface в 32 бит на пиксель или есть способ конвертировать пиксель Uint32 в 24 бит?

1 Ответ

0 голосов
/ 31 октября 2018

В конечном итоге вам потребуется замаскировать 3 из Uint32 байтов в pixel, оставив при этом 4-й байт target_pixel без изменений (помните о порядке байтов).

что-то вроде этого должно быть близко, но не учитывает порядок байтов:

//assumes pixel has 0x00 for unused byte and assumes LSB is the unused byte
*target_pixel = pixel | (*target_pixel & 0xff)

Кстати, ваш target_pixel расчет кажется неверным. Вы должны умножаться на количество байтов на пиксель, а не на sizeof(Uint32).

...