From 007d642e53b4ddc4ea75aba26fc35936b67fbc3f Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Wed, 16 May 2012 23:33:48 +0900 Subject: [PATCH] gdiplus: Save total and current frame in the image structure. --- dlls/gdiplus/gdiplus_private.h | 1 + dlls/gdiplus/image.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h index df66903ed00..753a162d8ec 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/gdiplus_private.h @@ -266,6 +266,7 @@ struct GpImage{ ImageType type; GUID format; UINT flags; + UINT frame_count, current_frame; UINT palette_flags; UINT palette_count; UINT palette_size; diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index ba8b9797eb0..c6a72b48efa 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -1767,6 +1767,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride, (*bitmap)->image.type = ImageTypeBitmap; memcpy(&(*bitmap)->image.format, &ImageFormatMemoryBMP, sizeof(GUID)); (*bitmap)->image.flags = ImageFlagsNone; + (*bitmap)->image.frame_count = 1; + (*bitmap)->image.current_frame = 0; (*bitmap)->image.palette_flags = 0; (*bitmap)->image.palette_count = 0; (*bitmap)->image.palette_size = 0; @@ -2591,7 +2593,7 @@ static GpStatus decode_image_wic(IStream* stream, REFCLSID clsid, GpImage **imag WICPixelFormatGUID wic_format; PixelFormat gdip_format=0; int i; - UINT width, height; + UINT width, height, frame_count; BitmapData lockeddata; WICRect wrc; HRESULT initresult; @@ -2604,7 +2606,11 @@ static GpStatus decode_image_wic(IStream* stream, REFCLSID clsid, GpImage **imag hr = IWICBitmapDecoder_Initialize(decoder, (IStream*)stream, WICDecodeMetadataCacheOnLoad); if (SUCCEEDED(hr)) + { + IWICBitmapDecoder_GetFrameCount(decoder, &frame_count); + /* FIXME: set current frame */ hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame); + } if (SUCCEEDED(hr)) /* got frame */ { @@ -2696,6 +2702,8 @@ end: { /* Native GDI+ used to be smarter, but since Win7 it just sets these flags. */ bitmap->image.flags |= ImageFlagsReadOnly|ImageFlagsHasRealPixelSize|ImageFlagsHasRealDPI|ImageFlagsColorSpaceRGB; + bitmap->image.frame_count = frame_count; + bitmap->image.current_frame = 0; } return status; @@ -2765,6 +2773,8 @@ static GpStatus decode_image_olepicture_metafile(IStream* stream, REFCLSID clsid (*image)->type = ImageTypeMetafile; (*image)->picture = pic; (*image)->flags = ImageFlagsNone; + (*image)->frame_count = 1; + (*image)->current_frame = 0; (*image)->palette_flags = 0; (*image)->palette_count = 0; (*image)->palette_size = 0; -- 2.11.4.GIT