gdiplus: Copy palettes with bitmaps.

Vincent Povirk madewokherd at gmail.com
Mon Mar 24 16:41:28 CDT 2014


For bug 35825.
-------------- next part --------------
From 5920d938e61433f84184513fc2780ae204181782 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Mon, 24 Mar 2014 16:36:35 -0500
Subject: [PATCH] gdiplus: Copy palettes with bitmaps.

---
 dlls/gdiplus/image.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 33e939a..501398a 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -1252,6 +1252,28 @@ GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL x, REAL y, REAL width, REAL height,
                               srcBitmap->stride,
                               srcBitmap->bits + srcBitmap->stride * area.Y + PIXELFORMATBPP(srcBitmap->format) * area.X / 8,
                               srcBitmap->format, srcBitmap->image.palette);
+
+        if (stat == Ok && srcBitmap->image.palette)
+        {
+            ColorPalette *src_palette, *dst_palette;
+
+            src_palette = srcBitmap->image.palette;
+
+            dst_palette = GdipAlloc(sizeof(UINT) * 2 + sizeof(ARGB) * src_palette->Count);
+
+            if (dst_palette)
+            {
+                dst_palette->Flags = src_palette->Flags;
+                dst_palette->Count = src_palette->Count;
+                memcpy(dst_palette->Entries, src_palette->Entries, sizeof(ARGB) * src_palette->Count);
+
+                GdipFree((*dstBitmap)->image.palette);
+                (*dstBitmap)->image.palette = dst_palette;
+            }
+            else
+                stat = OutOfMemory;
+        }
+
         if (stat != Ok)
             GdipDisposeImage((GpImage*)*dstBitmap);
     }
-- 
1.8.3.2



More information about the wine-patches mailing list