Fix converting wxBitmap with alpha and mask to wxImage (wxOSX)
When pixel is not masked it should be stored in the target wxImage in non-premultiplied format.
This commit is contained in:
@@ -1285,6 +1285,7 @@ wxImage wxBitmap::ConvertToImage() const
|
|||||||
r = ((color&0x0000FF00) >> 8) ;
|
r = ((color&0x0000FF00) >> 8) ;
|
||||||
a = (color&0x000000FF);
|
a = (color&0x000000FF);
|
||||||
#endif
|
#endif
|
||||||
|
bool isMasked = false;
|
||||||
if ( hasMask )
|
if ( hasMask )
|
||||||
{
|
{
|
||||||
if ( *maskp++ == 0x00 )
|
if ( *maskp++ == 0x00 )
|
||||||
@@ -1292,6 +1293,7 @@ wxImage wxBitmap::ConvertToImage() const
|
|||||||
r = MASK_RED ;
|
r = MASK_RED ;
|
||||||
g = MASK_GREEN ;
|
g = MASK_GREEN ;
|
||||||
b = MASK_BLUE ;
|
b = MASK_BLUE ;
|
||||||
|
isMasked = true;
|
||||||
}
|
}
|
||||||
else if ( r == MASK_RED && g == MASK_GREEN && b == MASK_BLUE )
|
else if ( r == MASK_RED && g == MASK_GREEN && b == MASK_BLUE )
|
||||||
b = MASK_BLUE_REPLACEMENT ;
|
b = MASK_BLUE_REPLACEMENT ;
|
||||||
@@ -1302,7 +1304,7 @@ wxImage wxBitmap::ConvertToImage() const
|
|||||||
*alpha++ = a ;
|
*alpha++ = a ;
|
||||||
#if wxOSX_USE_PREMULTIPLIED_ALPHA
|
#if wxOSX_USE_PREMULTIPLIED_ALPHA
|
||||||
// this must be non-premultiplied data
|
// this must be non-premultiplied data
|
||||||
if ( !hasMask && a != 0xFF && a!= 0 )
|
if ( !isMasked && a != 0xFF && a!= 0 )
|
||||||
{
|
{
|
||||||
r = r * 255 / a;
|
r = r * 255 / a;
|
||||||
g = g * 255 / a;
|
g = g * 255 / a;
|
||||||
|
Reference in New Issue
Block a user