Remove wxDIB::m_hasAlpha from wxMSW.
This field can't be set reliably as we don't know if LoadImage() Windows function loaded an 0RGB or an RGB bitmap so remove it completely to avoid the risk of using it wrongly. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65899 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -200,11 +200,6 @@ private:
|
|||||||
// the case
|
// the case
|
||||||
bool m_ownsHandle;
|
bool m_ownsHandle;
|
||||||
|
|
||||||
// if true, we have alpha, if false we don't (note that we can still have
|
|
||||||
// m_depth == 32 but the last component is then simply padding and not
|
|
||||||
// alpha)
|
|
||||||
bool m_hasAlpha;
|
|
||||||
|
|
||||||
|
|
||||||
// DIBs can't be copied
|
// DIBs can't be copied
|
||||||
wxDIB(const wxDIB&);
|
wxDIB(const wxDIB&);
|
||||||
@@ -220,7 +215,6 @@ void wxDIB::Init()
|
|||||||
{
|
{
|
||||||
m_handle = 0;
|
m_handle = 0;
|
||||||
m_ownsHandle = true;
|
m_ownsHandle = true;
|
||||||
m_hasAlpha = false;
|
|
||||||
|
|
||||||
m_data = NULL;
|
m_data = NULL;
|
||||||
|
|
||||||
|
@@ -144,8 +144,6 @@ bool wxDIB::Create(const wxBitmap& bmp)
|
|||||||
if ( !Create(GetHbitmapOf(bmp)) )
|
if ( !Create(GetHbitmapOf(bmp)) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_hasAlpha = bmp.HasAlpha();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -677,8 +675,8 @@ bool wxDIB::Create(const wxImage& image)
|
|||||||
|
|
||||||
// if we have alpha channel, we need to create a 32bpp RGBA DIB, otherwise
|
// if we have alpha channel, we need to create a 32bpp RGBA DIB, otherwise
|
||||||
// a 24bpp RGB is sufficient
|
// a 24bpp RGB is sufficient
|
||||||
m_hasAlpha = image.HasAlpha();
|
const bool hasAlpha = image.HasAlpha();
|
||||||
const int bpp = m_hasAlpha ? 32 : 24;
|
const int bpp = hasAlpha ? 32 : 24;
|
||||||
|
|
||||||
if ( !Create(w, h, bpp) )
|
if ( !Create(w, h, bpp) )
|
||||||
return false;
|
return false;
|
||||||
@@ -688,8 +686,8 @@ bool wxDIB::Create(const wxImage& image)
|
|||||||
const int srcBytesPerLine = w * 3;
|
const int srcBytesPerLine = w * 3;
|
||||||
const int dstBytesPerLine = GetLineSize(w, bpp);
|
const int dstBytesPerLine = GetLineSize(w, bpp);
|
||||||
const unsigned char *src = image.GetData() + ((h - 1) * srcBytesPerLine);
|
const unsigned char *src = image.GetData() + ((h - 1) * srcBytesPerLine);
|
||||||
const unsigned char *alpha = m_hasAlpha ? image.GetAlpha() + (h - 1)*w
|
const unsigned char *alpha = hasAlpha ? image.GetAlpha() + (h - 1)*w
|
||||||
: NULL;
|
: NULL;
|
||||||
unsigned char *dstLineStart = (unsigned char *)m_data;
|
unsigned char *dstLineStart = (unsigned char *)m_data;
|
||||||
for ( int y = 0; y < h; y++ )
|
for ( int y = 0; y < h; y++ )
|
||||||
{
|
{
|
||||||
@@ -754,9 +752,7 @@ wxImage wxDIB::ConvertToImage() const
|
|||||||
{
|
{
|
||||||
// 32 bit bitmaps may be either 0RGB or ARGB and we don't know in
|
// 32 bit bitmaps may be either 0RGB or ARGB and we don't know in
|
||||||
// advance which one do we have so suppose we have alpha of them and
|
// advance which one do we have so suppose we have alpha of them and
|
||||||
// get rid of it later if it turns out we didn't (in particular, don't
|
// get rid of it later if it turns out we didn't.
|
||||||
// trust m_hasAlpha which is not set correctly when the image was
|
|
||||||
// loaded from file).
|
|
||||||
image.SetAlpha();
|
image.SetAlpha();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user