added InitAlpha() (replaces patch 991168)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32213 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-02-19 21:51:37 +00:00
parent 1dfd425a8c
commit 828f093601
4 changed files with 51 additions and 0 deletions

View File

@@ -912,6 +912,44 @@ unsigned char *wxImage::GetAlpha() const
return M_IMGDATA->m_alpha;
}
void wxImage::InitAlpha()
{
wxCHECK_RET( !HasAlpha(), wxT("image already has an alpha channel") );
// initialize memory for alpha channel
SetAlpha();
unsigned char *alpha = M_IMGDATA->m_alpha;
const size_t lenAlpha = M_IMGDATA->m_width * M_IMGDATA->m_height;
static const unsigned char ALPHA_TRANSPARENT = 0;
static const unsigned char ALPHA_OPAQUE = 0xff;
if ( HasMask() )
{
// use the mask to initialize the alpha channel.
const unsigned char * const alphaEnd = alpha + lenAlpha;
const unsigned char mr = M_IMGDATA->m_maskRed;
const unsigned char mg = M_IMGDATA->m_maskGreen;
const unsigned char mb = M_IMGDATA->m_maskBlue;
for ( unsigned char *src = M_IMGDATA->m_data;
alpha < alphaEnd;
src += 3, alpha++ )
{
*alpha = (src[0] == mr && src[1] == mg && src[2] == mb)
? ALPHA_TRANSPARENT
: ALPHA_OPAQUE;
}
M_IMGDATA->m_hasMask = false;
}
else // no mask
{
// make the image fully opaque
memset(alpha, ALPHA_OPAQUE, lenAlpha);
}
}
// ----------------------------------------------------------------------------
// mask support
// ----------------------------------------------------------------------------