Add method to convert wxDIB to wxImage enforcing alpha channel values (wxMSW).

wxDIB::ConvertToImage called with Convert_AlphaAuto converts wxDIB to wxImage with automatic checking if 32 bpp DIB contains real alpha values (legacy way).
When it is called with Convert_AlphaAlwaysIf32bpp then automatic checking is disabled and 32 bpp DIB is unconditionally converted to ARGB wxImage.
This commit is contained in:
Artur Wieczorek
2016-01-21 17:31:48 +01:00
parent 183a88062a
commit a99e58e074
2 changed files with 14 additions and 3 deletions

View File

@@ -164,7 +164,18 @@ public:
bool Create(const wxImage& image, PixelFormat pf = PixelFormat_PreMultiplied);
// create wxImage having the same data as this DIB
wxImage ConvertToImage() const;
// Possible options of conversion to wxImage
enum ConversionFlags
{
// Determine whether 32bpp DIB contains real alpha channel
// and return wxImage with or without alpha channel values.
Convert_AlphaAuto,
// Assume that 32bpp DIB contains valid alpha channel and always
// return wxImage with alpha channel values in this case.
Convert_AlphaAlwaysIf32bpp
};
wxImage ConvertToImage(ConversionFlags flags = Convert_AlphaAuto) const;
#endif // wxUSE_IMAGE

View File

@@ -676,7 +676,7 @@ bool wxDIB::Create(const wxImage& image, PixelFormat pf)
return true;
}
wxImage wxDIB::ConvertToImage() const
wxImage wxDIB::ConvertToImage(ConversionFlags flags) const
{
wxCHECK_MSG( IsOk(), wxNullImage,
wxT("can't convert invalid DIB to wxImage") );
@@ -776,7 +776,7 @@ wxImage wxDIB::ConvertToImage() const
if ( hasOpaque && hasTransparent )
hasAlpha = true;
if ( !hasAlpha && image.HasAlpha() )
if ( !hasAlpha && image.HasAlpha() && flags == Convert_AlphaAuto )
image.ClearAlpha();
return image;