Изменение цвета пикселя в SDL - PullRequest
1 голос
/ 24 июля 2011

Я делаю игру, которая использует только PNG с черными и белыми пикселями.Но в некоторых случаях я хотел бы изменить цвет белых пикселей на что-то другое, например зеленый (# 00FF00).

Как бы я поступил именно так?

РЕДАКТИРОВАТЬ: Хорошо, я нашел решение

Вот простая функция для этого:


    void setColor(SDL_Surface *surface, SDL_Color color) {
        Uint16 *pixels = (Uint16 *) surface->pixels;            // Get the pixels from the Surface

        // Iterrate through the pixels and chagne the color
        for (int i = 0; i w * surface->h); i++) {
            if (pixels[i] == SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF))        // Search for white pixels
                pixels[i] = SDL_MapRGB(surface->format, color.r, color.b, color.g);
        }
    }

Что нужно иметь в виду, замените «Uint16» на «Uint32», если выиспользуя 32-битную поверхность или «Uint8» для 8-битной поверхности.

Я не уверен, насколько быстрым является этот код, но он выполняет свою работу.

1 Ответ

0 голосов
/ 24 июля 2011

Это зависит от того, какой именно цвет вы пытаетесь установить.

Без дополнительной информации сразу приходят на ум два API-интерфейса: "SDL_SetColors ()" и "SDL_SetPalette ()".

Но реальный ответ - "это зависит".

...