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