From a99e58e0740f9a8ab5918e671dfe242c8baf48cf Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Thu, 21 Jan 2016 17:31:48 +0100 Subject: [PATCH] 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. --- include/wx/msw/dib.h | 13 ++++++++++++- src/msw/dib.cpp | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) 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;