SDL/SDL_Image : DIsplay transparent PNG

Hi,

IS there anything special to do to display a PNG with alpha channel ?
I have a background and I am displaying a png that is supposed to have some
transparency but it doesn’t seem to work :

/* Initialize SDL */
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
fprintf(stderr, “Couldn’t initialize SDL: %s\n”,SDL_GetError());
return(1);
}

info = SDL_GetVideoInfo();
if ( info->vfmt->BitsPerPixel > 8 ) {
	video_bpp = info->vfmt->BitsPerPixel;
} else {
	video_bpp = 16;

fprintf(stderr, “forced 16 bpp mode\n”);
}
videoflags = SDL_SWSURFACE;

/* Set video mode */
if

((screen=SDL_SetVideoMode(info->current_w,info->current_h,video_bpp,videoflags))
== NULL)
{
fprintf(stderr, “Couldn’t set %dx%dx%d video mode: %s\n”,
w, h, video_bpp, SDL_GetError());
quit(2);
}

//We must first initialize the SDL video component, and check for success
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
	printf("Unable to initialize SDL: %s\n", SDL_GetError());
	return 1;
}

//When this program exits, SDL_Quit must be called
atexit(SDL_Quit);

SDL_Surface *font;
SDL_Surface *temp;	//This pointer will temporarily reference our bitmap

sprite
SDL_Rect rcSrc, rcDest; //These rectangles will describe the source and
destination regions of our blit

temp = IMG_Load(std::string(sAppPath +

std::string(“BG_pink_680x680_32bits.png”)).c_str());
image_font = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);

rcSrc.x = 0;
rcSrc.y = 0;
rcSrc.w = image_font->w;
rcSrc.h = image_font->h;

SDL_BlitSurface(image_font, NULL, screen, &rcSrc);
temp = IMG_Load(std::string(sAppPath + images_min[0]).c_str());
//sAppPath += sImgPath1;
//temp = IMG_Load(sAppPath.c_str());
if (temp == NULL) {
	printf("Unable to load bitmap: %s\n", SDL_GetError());
	return 33;
}

//Convert the surface to the appropriate display format
image = SDL_DisplayFormat(temp);

//Release the temporary surface
SDL_FreeSurface(temp);

//Construct the source rectangle for our blit
rcSrc.x = 0;
rcSrc.y = 0;
rcSrc.w = image->w;	//Use image->w to display the entire width of the

image
rcSrc.h = image->h; //Use image->h to display the entire height of the
image

//Blit the image to the backbuffer
//resizeImage(image, rcDest.w, rcDest.h);
SDL_BlitSurface(image, NULL, screen, &rcSrc);
//SDL_StretchSurfaceRect(image,  &rcSrc, screen, &rcDest);

//Flip the backbuffer to the primary
SDL_Flip(screen);

SDL_DisplayFormatAlpha()?

Jonny DOn Fri, Jun 19, 2009 at 12:47 PM, Vincent R. wrote:

Hi,

IS there anything special to do to display a PNG with alpha channel ?
I have a background and I am displaying a png that is supposed to have some
transparency but it doesn’t seem to work :

/* Initialize SDL */
? ? ? ?if (SDL_Init(SDL_INIT_VIDEO) < 0)
? ? ? ?{
? ? ? ? ? ? ? ?fprintf(stderr, “Couldn’t initialize SDL: %s\n”,SDL_GetError());
? ? ? ? ? ? ? ?return(1);
? ? ? ?}

? ? ? ?info = SDL_GetVideoInfo();
? ? ? ?if ( info->vfmt->BitsPerPixel > 8 ) {
? ? ? ? ? ? ? ?video_bpp = info->vfmt->BitsPerPixel;
? ? ? ?} else {
? ? ? ? ? ? ? ?video_bpp = 16;
fprintf(stderr, “forced 16 bpp mode\n”);
? ? ? ?}
? ? ? ?videoflags = SDL_SWSURFACE;

? ? ? ?/* Set video mode */
? ? ? ?if
((screen=SDL_SetVideoMode(info->current_w,info->current_h,video_bpp,videoflags))
== NULL)
? ? ? ?{
? ? ? ? ? ? ? ?fprintf(stderr, “Couldn’t set %dx%dx%d video mode: %s\n”,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?w, h, video_bpp, SDL_GetError());
? ? ? ? ? ? ? ?quit(2);
? ? ? ?}

? ? ? ?//We must first initialize the SDL video component, and check for success
? ? ? ?if (SDL_Init(SDL_INIT_VIDEO) != 0)
? ? ? ?{
? ? ? ? ? ? ? ?printf(“Unable to initialize SDL: %s\n”, SDL_GetError());
? ? ? ? ? ? ? ?return 1;
? ? ? ?}

? ? ? ?//When this program exits, SDL_Quit must be called
? ? ? ?atexit(SDL_Quit);

? ? ? ?SDL_Surface *font;
? ? ? ?SDL_Surface *temp; ? ? ?//This pointer will temporarily reference our bitmap
sprite
? ? ? ?SDL_Rect rcSrc, rcDest; //These rectangles will describe the source and
destination regions of our blit

? ? ? ?temp = IMG_Load(std::string(sAppPath +
std::string(“BG_pink_680x680_32bits.png”)).c_str());
? ? ? ?image_font = SDL_DisplayFormat(temp);
? ? ? ?SDL_FreeSurface(temp);

? ? ? ?rcSrc.x = 0;
? ? ? ?rcSrc.y = 0;
? ? ? ?rcSrc.w = image_font->w;
? ? ? ?rcSrc.h = image_font->h;

? ? ? ?SDL_BlitSurface(image_font, NULL, screen, &rcSrc);
? ? ? ?temp = IMG_Load(std::string(sAppPath + images_min[0]).c_str());
? ? ? ?//sAppPath += sImgPath1;
? ? ? ?//temp = IMG_Load(sAppPath.c_str());
? ? ? ?if (temp == NULL) {
? ? ? ? ? ? ? ?printf(“Unable to load bitmap: %s\n”, SDL_GetError());
? ? ? ? ? ? ? ?return 33;
? ? ? ?}

? ? ? ?//Convert the surface to the appropriate display format
? ? ? ?image = SDL_DisplayFormat(temp);

? ? ? ?//Release the temporary surface
? ? ? ?SDL_FreeSurface(temp);

? ? ? ?//Construct the source rectangle for our blit
? ? ? ?rcSrc.x = 0;
? ? ? ?rcSrc.y = 0;
? ? ? ?rcSrc.w = image->w; ? ? //Use image->w to display the entire width of the
image
? ? ? ?rcSrc.h = image->h; ? ? //Use image->h to display the entire height of the
image

? ? ? ?//Blit the image to the backbuffer
? ? ? ?//resizeImage(image, rcDest.w, rcDest.h);
? ? ? ?SDL_BlitSurface(image, NULL, screen, &rcSrc);
? ? ? ?//SDL_StretchSurfaceRect(image, ?&rcSrc, screen, &rcDest);

? ? ? ?//Flip the backbuffer to the primary
? ? ? ?SDL_Flip(screen);


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Hum ok I must admit that I didn’t search too far.
Thanks anyway.On Fri, 19 Jun 2009 12:49:10 -0400, Jonathan Dearborn wrote:

SDL_DisplayFormatAlpha()?

Jonny D