From 500a96d07964970b7d6e3f4d699dc28051180bb8 Mon Sep 17 00:00:00 2001 From: Vincent Povirk 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 f73427423c7..20098ca1db2 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); } -- 2.11.4.GIT