Я делаю игру, в которой используется только 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-битной поверхности.
Я не уверен, насколько быстро этот код, но он выполняет свою работу.