]> git.saurik.com Git - wxWidgets.git/commitdiff
premultiply the colours by the alpha value
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 Apr 2003 14:02:17 +0000 (14:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 Apr 2003 14:02:17 +0000 (14:02 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/bitmap.h
src/msw/bitmap.cpp

index cd67008e6b6dc09fdf2ac253298fe1d9389eaf93..75efef8d651780e0395a8e9a1ac879973f3cdbdc 100644 (file)
@@ -133,7 +133,7 @@ public:
 
     // raw bitmap access support functions
     bool GetRawData(wxRawBitmapData *data);
-    void UngetRawData(wxRawBitmapData *) { /* nothing to do here */ }
+    void UngetRawData(wxRawBitmapData *);
 
 #if wxUSE_PALETTE
     wxPalette* GetPalette() const;
index 564f1f33f175e998d89d67c253449f8a31e4e936..ca244ccda0ab9d4902071bd9f2c81a08dbd149c3 100644 (file)
@@ -1198,6 +1198,33 @@ bool wxBitmap::GetRawData(wxRawBitmapData *data)
     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
 // ----------------------------------------------------------------------------