premultiply the colours by the alpha value

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-04-13 14:02:17 +00:00
parent e34dcad290
commit 13c13ecbbf
2 changed files with 28 additions and 1 deletions

View File

@@ -133,7 +133,7 @@ public:
// raw bitmap access support functions // raw bitmap access support functions
bool GetRawData(wxRawBitmapData *data); bool GetRawData(wxRawBitmapData *data);
void UngetRawData(wxRawBitmapData *) { /* nothing to do here */ } void UngetRawData(wxRawBitmapData *);
#if wxUSE_PALETTE #if wxUSE_PALETTE
wxPalette* GetPalette() const; wxPalette* GetPalette() const;

View File

@@ -1198,6 +1198,33 @@ bool wxBitmap::GetRawData(wxRawBitmapData *data)
return TRUE; return TRUE;
} }
void wxBitmap::UngetRawData(wxRawBitmapData *data)
{
wxCHECK_RET( data, _T("NULL pointer in wxBitmap::UngetRawData()") );
// AlphaBlend() wants to have premultiplied source alpha but wxRawBitmap
// API uses normal, not premultiplied, colours, so adjust them here now
wxRawBitmapIterator p(data);
unsigned char *pixels = data->GetPixels();
const int w = data->GetWidth();
const int h = data->GetHeight();
for ( int y = 0; y < h; y++ )
{
for ( int x = 0; x < w; x++ )
{
const unsigned alpha = p.Alpha();
p.Red() *= alpha;
p.Red() /= 255
p.Blue() *= alpha;
p.Blue() /= 255
p.Green() *= alpha;
p.Green() /= 255
}
}
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxMask // wxMask
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------