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