1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
Pixel *GetPixel(SDL_Surface *surface, int x, int y)
{
Uint8 p8, *buf8;
Uint16 p16, *buf16;
Uint32 p32, *buf32;
switch(surface->format->BitsPerPixel)
{
case 8:
buf8=(Uint8 *)surface->pixels;
p8=buf8[y * surface->w + x];
p32=p8;
break;
case 16:
buf16=(Uint16 *)surface->pixels;
p16=buf16[y * surface->w + x];
p32=p16;
break;
default:
buf32=(Uint32 *)surface->pixels;
p32=buf32[y * surface->w + x];
break;
}
Uint8 Red, Green, Blue, Alpha;
SDL_GetRGBA(p32, surface->format, &Red, &Green, &Blue, &Alpha);
Pixel * tmp = new Pixel(Red, Green, Blue, Alpha);
if(!tmp)
Logger("failed to get pixel from surface");
return tmp;
}
|