From: Vadim Zeitlin Date: Sun, 13 Apr 2003 14:09:00 +0000 (+0000) Subject: fix alpha premultiplying X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/106c33bb1d7a35d1fa7fb8ce338c186beb0b2930 fix alpha premultiplying git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20194 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/bitmap.cpp b/src/msw/bitmap.cpp index ca244ccda0..0202599afb 100644 --- a/src/msw/bitmap.cpp +++ b/src/msw/bitmap.cpp @@ -1204,24 +1204,28 @@ void wxBitmap::UngetRawData(wxRawBitmapData *data) // 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(); + wxRawBitmapIterator p(*data); const int w = data->GetWidth(); const int h = data->GetHeight(); for ( int y = 0; y < h; y++ ) { + wxRawBitmapIterator rowStart = p; + 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 + + p.Red() = (p.Red() * alpha) / 255; + p.Blue() = (p.Blue() * alpha) / 255; + p.Green() = (p.Green() * alpha) / 255; + + ++p; } + + p = rowStart; + p.OffsetY(1); } }