Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Transparencia En Sdl

Iniciado por javiel, 12 de Octubre de 2004, 01:45:55 PM

« anterior - próximo »

javiel

 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
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.