diff --git a/include/wx/msw/dib.h b/include/wx/msw/dib.h index a78230639b..b74880312b 100644 --- a/include/wx/msw/dib.h +++ b/include/wx/msw/dib.h @@ -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 diff --git a/src/msw/dib.cpp b/src/msw/dib.cpp index 66a28cbf3e..616c59c7a4 100644 --- a/src/msw/dib.cpp +++ b/src/msw/dib.cpp @@ -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;