[1/2] gdiplus: Fix GdipImageRotateFlip for images from streams.
Vincent Povirk
madewokherd at gmail.com
Thu Jul 12 09:20:40 CDT 2012
-------------- next part --------------
From d2593e1db505675fc380970cbaadc75afd560999 Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Thu, 12 Jul 2012 09:17:09 -0500
Subject: [PATCH 1/2] gdiplus: Fix GdipImageRotateFlip for images from
streams.
---
dlls/gdiplus/image.c | 8 ++++++--
dlls/gdiplus/tests/image.c | 11 +++++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index db79eca..233a9eac 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -1971,8 +1971,6 @@ static void move_bitmap(GpBitmap *dst, GpBitmap *src, BOOL clobber_palette)
{
assert(src->image.type == ImageTypeBitmap);
assert(dst->image.type == ImageTypeBitmap);
- assert(src->image.stream == NULL);
- assert(dst->image.stream == NULL);
GdipFree(dst->bitmapbits);
DeleteDC(dst->hdc);
@@ -2001,6 +1999,12 @@ static void move_bitmap(GpBitmap *dst, GpBitmap *src, BOOL clobber_palette)
if (dst->metadata_reader)
IWICMetadataReader_Release(dst->metadata_reader);
dst->metadata_reader = src->metadata_reader;
+ if (dst->image.stream)
+ IStream_Release(dst->image.stream);
+ dst->image.stream = src->image.stream;
+ dst->image.frame_count = src->image.frame_count;
+ dst->image.current_frame = src->image.current_frame;
+ dst->image.format = src->image.format;
src->image.type = ~0;
GdipFree(src);
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index c001a86..6676366 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -2345,6 +2345,17 @@ static void test_multiframegif(void)
expect(Ok, stat);
expect(0xffffffff, color);
+ /* rotate/flip discards the information about other frames */
+ stat = GdipImageRotateFlip((GpImage*)bmp, Rotate90FlipNone);
+ expect(Ok, stat);
+
+ count = 12345;
+ stat = GdipImageGetFrameCount((GpImage*)bmp, &dimension, &count);
+ expect(Ok, stat);
+ expect(1, count);
+
+ expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bmp, __LINE__, FALSE);
+
GdipDisposeImage((GpImage*)bmp);
IStream_Release(stream);
--
1.7.9.5
More information about the wine-patches
mailing list