static mng_bool mngProcessHeaderFn(mng_handle mng, mng_uint32 width, mng_uint32 height) { mngstuff *mymng = (mngstuff *)mng_get_userdata(mng); GFXFormat format; mng_uint8 colorType = mng_get_colortype(mng); mng_uint8 alphaDepth = mng_get_alphadepth(mng); switch(colorType) { case MNG_COLORTYPE_GRAY: case MNG_COLORTYPE_JPEGGRAY: format = GFXFormatR8G8B8; mng_set_canvasstyle(mng, MNG_CANVAS_RGB8); break; case MNG_COLORTYPE_INDEXED: if(alphaDepth >= 1) { format = GFXFormatR8G8B8A8; mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8); } else { format = GFXFormatR8G8B8; mng_set_canvasstyle(mng, MNG_CANVAS_RGB8); } case MNG_COLORTYPE_RGB: case MNG_COLORTYPE_JPEGCOLOR: if(alphaDepth >= 1) { format = GFXFormatR8G8B8A8; mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8); } else { format = GFXFormatR8G8B8; mng_set_canvasstyle(mng, MNG_CANVAS_RGB8); } break; case MNG_COLORTYPE_RGBA: case MNG_COLORTYPE_JPEGCOLORA: format = GFXFormatR8G8B8A8; mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8); break; default: // This case should never get hit, however it resolves a compiler // warning format = GFXFormat_FIRST; AssertISV( false, "Unknown color format in bitmap MNG Loading" ); } mymng->image->allocateBitmap(width, height, false, format); return MNG_TRUE; }
//--------------------------------------------------------------------------------------------- // the header's been read. set up the display stuff //--------------------------------------------------------------------------------------------- mng_bool MNG_DECL mymngprocessheader(mng_handle mng, mng_uint32 width, mng_uint32 height) { ILuint AlphaDepth; AlphaDepth = mng_get_alphadepth(mng); if (AlphaDepth == 0) { ilTexImage(width, height, 1, 3, IL_BGR, IL_UNSIGNED_BYTE, NULL); iCurImage->Origin = IL_ORIGIN_LOWER_LEFT; mng_set_canvasstyle(mng, MNG_CANVAS_BGR8); } else { // Use alpha channel ilTexImage(width, height, 1, 4, IL_BGRA, IL_UNSIGNED_BYTE, NULL); iCurImage->Origin = IL_ORIGIN_LOWER_LEFT; mng_set_canvasstyle(mng, MNG_CANVAS_BGRA8); } iCurImage->Origin = IL_ORIGIN_UPPER_LEFT; return MNG_TRUE; }
mng_bool mymngprocessheader(mng_handle mng, mng_uint32 width, mng_uint32 height) { mngstuff *client_data = (mngstuff *)mng_get_userdata(mng); BYTE bHasAlpha = mng_get_alphadepth(mng); #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB if(bHasAlpha) { // allocate a bitmap with the given dimensions FIBITMAP *bitmap = FreeImage_Allocate(width, height, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); client_data->bitmap = bitmap; // tell the mng decoder about our bit-depth choice mng_set_canvasstyle(mng, MNG_CANVAS_RGBA8); } else { // allocate a bitmap with the given dimensions FIBITMAP *bitmap = FreeImage_Allocate(width, height, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); client_data->bitmap = bitmap; // tell the mng decoder about our bit-depth choice mng_set_canvasstyle(mng, MNG_CANVAS_RGB8); } #else if(bHasAlpha) { // allocate a bitmap with the given dimensions FIBITMAP *bitmap = FreeImage_Allocate(width, height, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); client_data->bitmap = bitmap; // tell the mng decoder about our bit-depth choice mng_set_canvasstyle(mng, MNG_CANVAS_BGRA8); } else { // allocate a bitmap with the given dimensions FIBITMAP *bitmap = FreeImage_Allocate(width, height, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); client_data->bitmap = bitmap; // tell the mng decoder about our bit-depth choice mng_set_canvasstyle(mng, MNG_CANVAS_BGR8); } #endif // FREEIMAGE_COLORORDER_RGB return client_data->bitmap ? MNG_TRUE : MNG_FALSE; }