Hola a todos:
Vamos a ver si me explico bien. Estoy intentando hacer una transparencia en SDL con SDL_SetAlpha, el problema es que SDL cuando lo intentas sobre un PNG que tiene partes transparentes, simplemente no te lo hace. Le pones el SDL_SetAlpha y no hace nada. He estado mirando código (GPL) y en supertux lo solucionan creando un nuevo SDL_Surface, le ponen un color de fondo a la superficie, le copian la imagen y luego le hacen un SDL_SetColorKey para quitarle el fondo. Luego a la superficie nueva le hacen el alpha y funciona. Os pongo el código para que lo veáis mas claro.
if(alpha != 255) {
SDL_Surface* sdl_surface_copy = SDL_CreateRGBSurface (sprite[actualFrame].img->flags,
sprite[actualFrame].img->w, sprite[actualFrame].img->h, sprite[actualFrame].img->format->BitsPerPixel,
sprite[actualFrame].img->format->Rmask, sprite[actualFrame].img->format->Gmask,
sprite[actualFrame].img->format->Bmask,
0);
int colorkey = SDL_MapRGB(sdl_surface_copy->format, 255, 0, 255);
SDL_FillRect(sdl_surface_copy, NULL, colorkey);
SDL_SetColorKey(sdl_surface_copy, SDL_SRCCOLORKEY, colorkey);
SDL_BlitSurface(sprite[actualFrame].img, NULL, sdl_surface_copy, NULL);
SDL_SetAlpha(sdl_surface_copy ,SDL_SRCALPHA,alpha);
SDL_BlitSurface (sdl_surface_copy, &src, superficie, &dest);
SDL_FreeSurface (sdl_surface_copy);
} else {
SDL_BlitSurface (sprite[actualFrame].img, &src, superficie, &dest);
}
El problema que tengo es que si le pongo de fondo cualquier color luego el SDL_SetColorKey no me lo quita. O sea, el código anterio me haría el alpha, pero me dejaría el rosa de fondo (que es SDL_MapRGB(sdl_surface_copy->format, 255, 0, 255);). Ahora si en lugar de ponerle un rosa, le pongo un negro, osea,
SDL_MapRGB(sdl_surface_copy->format, 0, 0, 0);
La tranparencia me la hace bien y me elimina el color de fondo. El programa, como ya habréis sospechado es q si quiero el negro, quito también cualquier negro que tenga la imagen, aunque el SDL_SetColorKey esté antes del blit de la imagen, y entonces no funciona. Cualquier color menos el negro no funciona
¿sabéis de que podría ser?
Muchas gracias a todos