Logo

¡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.
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.