Definition at line 9 of file PixelTool.h.
Static Public Member Functions | |
static bool | colorEquals (const SDL_Color &color1, const SDL_Color &color2) |
Compare colors. | |
static Uint32 | convertColor (SDL_PixelFormat *format, const SDL_Color &color) |
static SDL_Color | getColor (SDL_Surface *surface, int x, int y) |
Get color at x, y. | |
static void | putColor (SDL_Surface *surface, int x, int y, const SDL_Color &color) |
Put color at x, y. | |
static Uint32 | getPixel (SDL_Surface *surface, int x, int y) |
Get pixel at x, y. | |
static void | putPixel (SDL_Surface *surface, int x, int y, Uint32 pixel) |
Put pixel at x, y. | |
static Uint32 | unpackPixel (Uint8 bpp, Uint8 *p) |
Decodes pixel from memory. | |
static void | packPixel (Uint8 bpp, Uint8 *p, Uint32 pixel) |
Encodes pixel to memory. |
|
Compare colors. NOTE: aplha values are ignored Definition at line 21 of file PixelTool.cpp. 00022 {
00023 return color1.r == color2.r
00024 && color1.g == color2.g
00025 && color1.b == color2.b;
00026 }
|
|
Definition at line 29 of file PixelTool.cpp. 00030 {
00031 return SDL_MapRGB(format, color.r, color.g, color.b);
00032 }
|
|
Get color at x, y. Surface must be locked.
Definition at line 40 of file PixelTool.cpp. 00041 { 00042 SDL_Color color; 00043 SDL_GetRGBA(getPixel(surface, x, y), surface->format, 00044 &color.r, &color.g, &color.b, &color.unused); 00045 return color; 00046 }
|
|
Get pixel at x, y. Surface must be locked.
Definition at line 68 of file PixelTool.cpp. 00069 { 00070 assert((0 <= x && x < surface->w) && (0 <= y && y < surface->h)); 00071 00072 int bpp = surface->format->BytesPerPixel; 00073 Uint8 *p = static_cast<Uint8*>(surface->pixels) + y * surface->pitch 00074 + x * bpp; 00075 00076 return unpackPixel(bpp, p); 00077 }
|
|
Encodes pixel to memory.
Definition at line 133 of file PixelTool.cpp. 00134 { 00135 assert(p != NULL); 00136 00137 switch(bpp) { 00138 case 1: 00139 *p = pixel; 00140 break; 00141 case 2: 00142 *reinterpret_cast<Uint16*>(p) = pixel; 00143 break; 00144 case 3: 00145 if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { 00146 p[0] = (pixel >> 16) & 0xff; 00147 p[1] = (pixel >> 8) & 0xff; 00148 p[2] = pixel & 0xff; 00149 } else { 00150 p[0] = pixel & 0xff; 00151 p[1] = (pixel >> 8) & 0xff; 00152 p[2] = (pixel >> 16) & 0xff; 00153 } 00154 break; 00155 case 4: 00156 *reinterpret_cast<Uint32*>(p) = pixel; 00157 break; 00158 default: 00159 throw LogicException(ExInfo("unknown color depth") 00160 .addInfo("bpp", bpp)); 00161 } 00162 }
|
|
Put color at x, y. Surface must be locked. TODO: support alpha values Definition at line 54 of file PixelTool.cpp. 00056 { 00057 Uint32 pixel = SDL_MapRGBA(surface->format, 00058 color.r, color.g, color.b, color.unused); 00059 putPixel(surface, x, y, pixel); 00060 }
|
|
Put pixel at x, y. Surface must be locked. Definition at line 84 of file PixelTool.cpp. 00085 { 00086 if ((0 <= x && x < surface->w) && (0 <= y && y < surface->h)) { 00087 int bpp = surface->format->BytesPerPixel; 00088 Uint8 *p = static_cast<Uint8*>(surface->pixels) + y * surface->pitch 00089 + x * bpp; 00090 00091 packPixel(bpp, p, pixel); 00092 } 00093 }
|
|
Decodes pixel from memory.
Definition at line 103 of file PixelTool.cpp. 00104 { 00105 switch(bpp) { 00106 case 1: // 8bit 00107 return *p; 00108 case 2: // 16bit 00109 return *reinterpret_cast<Uint16*>(p); 00110 case 3: // 24bit 00111 if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { 00112 return p[0] << 16 | p[1] << 8 | p[2]; 00113 } 00114 else { 00115 return p[0] | p[1] << 8 | p[2] << 16; 00116 } 00117 case 4: // 32 bit 00118 return *reinterpret_cast<Uint32*>(p); 00119 default: 00120 throw LogicException(ExInfo("unknown color depth") 00121 .addInfo("bpp", bpp)); 00122 } 00123 }
|