From 577740f0d79522da15232cf03de38df9e2c7945a Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 12 Jul 2012 09:17:09 -0500 Subject: [PATCH] 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 db79ecaf0ff..233a9eac612 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 29182aa30bc..750b084b6b9 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);