Jump to content

  • Log In with Google      Sign In   
  • Create Account


SDL_jesse

Member Since 03 Mar 2012
Offline Last Active Mar 03 2012 08:46 PM

Topics I've Started

Transparent png not transparent with sdl_image

03 March 2012 - 04:33 AM

I created a png in photoshop with a transparent background, and when I load up the png it has transparency. But when I load it into my game using SDL_image it appears white where it should be transparent.I am not use SDL_BlitSurface(),I use getPiexl() and putPiexl() instead,here is my code:
#include <iostream>
#include <string>
#include "SDL/SDL_image.h"
using namespace std;


void putPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to set */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

switch(bpp) {
case 1:
*p = pixel;
break;

case 2:
*(Uint16 *)p = pixel;
break;

case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
p[0] = (pixel >> 16) & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = pixel & 0xff;
} else {
p[0] = pixel & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = (pixel >> 16) & 0xff;
}
break;

case 4:
*(Uint32 *)p = pixel;
break;
}
}

Uint32 getPixel(SDL_Surface *surface, int x, int y)
{
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to retrieve */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

switch(bpp) {
case 1:
return *p;

case 2:
return *(Uint16 *)p;

case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;

case 4:
return *(Uint32 *)p;

default:
return 0; /* shouldn't happen, but avoids warnings */
}
}



int main(int argc, char *argv[]) {

SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *pScreen = ::SDL_SetVideoMode(640, 480, 0, SDL_SWSURFACE | SDL_DOUBLEBUF);
SDL_Surface *image = IMG_Load("jbutton.png");
SDL_DisplayFormatAlpha(image);
for(int i=0;i<image->w;i++)
{
for(int j=0;j<image->h;j++)
{

Uint32 color=getPixel(image,i,j);
putPixel(pScreen,i,j,color);


}
}
// SDL_BlitSurface(img, 0, video, 0); //this will be ok
SDL_Flip(pScreen);
SDL_Delay(5000);

SDL_Quit();
return 0;
}

PARTNERS