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:
@@ -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;
|
||||||
|
@@ -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
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user