Fixed: loadPNG with RGB images was returning 32
This commit is contained in:
parent
5b21d864a7
commit
39f838a1fd
1 changed files with 31 additions and 1 deletions
|
@ -136,6 +136,36 @@ uint8 CBitmap::readPNG( NLMISC::IStream &f )
|
|||
// get again width, height and the new bit-depth and color-type
|
||||
png_get_IHDR(png_ptr, info_ptr, &width, &height, &iBitDepth, &iColorType, NULL, NULL, NULL);
|
||||
|
||||
uint8 imageDepth;
|
||||
|
||||
switch(iColorType)
|
||||
{
|
||||
case PNG_COLOR_TYPE_GRAY:
|
||||
imageDepth = iBitDepth;
|
||||
break;
|
||||
|
||||
case PNG_COLOR_TYPE_PALETTE:
|
||||
imageDepth = iBitDepth;
|
||||
break;
|
||||
|
||||
case PNG_COLOR_TYPE_RGB:
|
||||
imageDepth = iBitDepth * 3;
|
||||
break;
|
||||
|
||||
case PNG_COLOR_TYPE_RGB_ALPHA:
|
||||
imageDepth = iBitDepth * 4;
|
||||
break;
|
||||
|
||||
case PNG_COLOR_TYPE_GRAY_ALPHA:
|
||||
imageDepth = iBitDepth * 2;
|
||||
break;
|
||||
|
||||
default:
|
||||
imageDepth = iBitDepth * 4;
|
||||
nlwarning("Unable to determine PNG color type: %d, consider it as RGBA", iColorType);
|
||||
break;
|
||||
}
|
||||
|
||||
// at this point, the image must be converted to an 24bit image RGB
|
||||
|
||||
// rowbytes is the width x number of channels
|
||||
|
@ -208,7 +238,7 @@ uint8 CBitmap::readPNG( NLMISC::IStream &f )
|
|||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||
|
||||
//return the size of a pixel, either 8,24,32 bit
|
||||
return uint8(dstChannels * iBitDepth);
|
||||
return imageDepth;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------*\
|
||||
|
|
Loading…
Reference in a new issue