void IAGSEngine::GetRawColorComponents(int32 coldepth, int32 color, int32 *red, int32 *green, int32 *blue, int32 *alpha) { if (red) *red = getr_depth(coldepth, color); if (green) *green = getg_depth(coldepth, color); if (blue) *blue = getb_depth(coldepth, color); if (alpha) *alpha = geta_depth(coldepth, color); }
/* geta: * Extracts the alpha component (ranging 0-255) from a pixel in the format * being used by the current video mode. */ int geta(int c) { return geta_depth(_color_depth, c); }
virtual Image* load(const std::string& filename, bool convertToDisplayFormat = true) { BITMAP *bmp = load_bitmap(filename.c_str(), NULL); if (bmp == NULL) { throw GCN_EXCEPTION( std::string("Unable to load image file: ") + filename); } int bitmapBpp = bitmap_color_depth(bmp); // As a BITMAP without an alpha channel in Allegro has // all it's alpha values set to zero we have to check // if the BITMAP has an alpha channel. If no alpha channel // exists then we need to change the alpha values to 255 // before creating the OpenGL image. bool hasAlphaChannel = false; int x, y; for (y = 0; y < bmp->h; y++) { for (x = 0; x < bmp->w; x++) { int pixel = getpixel(bmp, x, y); if (geta_depth(bitmapBpp, pixel) != 0) { hasAlphaChannel = true; } } } unsigned int *pixels = new unsigned int[bmp->w * bmp->h]; for (y = 0; y < bmp->h; y++) { for (x = 0; x < bmp->w; x++) { int pixel = getpixel(bmp,x, y); if (!hasAlphaChannel) { pixels[x + y * bmp->w] = pixel | 0xff000000; } else { pixels[x + y * bmp->w] = pixel; } } } OpenGLImage *image = new OpenGLImage(pixels, bmp->w, bmp->h, convertToDisplayFormat); delete[] pixels; destroy_bitmap(bmp); return image; }