Module: wine Branch: master Commit: 7dfc674437a113ea2f515dfbc03270c0be42e41b URL: http://source.winehq.org/git/wine.git/?a=commit;h=7dfc674437a113ea2f515dfbc0...
Author: Vincent Povirk vincent@codeweavers.com Date: Sat May 8 13:29:53 2010 -0500
gdiplus: Implement GdipGetImageThumbnail.
---
dlls/gdiplus/image.c | 41 +++++++++++++++++++++++++++++++++++++++-- dlls/gdiplus/tests/image.c | 10 +++++----- 2 files changed, 44 insertions(+), 7 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 0eaaf2e..8b55115 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -3515,9 +3515,46 @@ GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage *image, UINT width, UINT heigh GpImage **ret_image, GetThumbnailImageAbort cb, VOID * cb_data) { - FIXME("(%p %u %u %p %p %p) stub\n", + GpStatus stat; + GpGraphics *graphics; + UINT srcwidth, srcheight; + + TRACE("(%p %u %u %p %p %p)\n", image, width, height, ret_image, cb, cb_data); - return NotImplemented; + + if (!image || !ret_image) + return InvalidParameter; + + if (!width) width = 120; + if (!height) height = 120; + + GdipGetImageWidth(image, &srcwidth); + GdipGetImageHeight(image, &srcheight); + + stat = GdipCreateBitmapFromScan0(width, height, 0, PixelFormat32bppARGB, + NULL, (GpBitmap**)ret_image); + + if (stat == Ok) + { + stat = GdipGetImageGraphicsContext(*ret_image, &graphics); + + if (stat == Ok) + { + stat = GdipDrawImageRectRectI(graphics, image, + 0, 0, width, height, 0, 0, srcwidth, srcheight, UnitPixel, + NULL, NULL, NULL); + + GdipDeleteGraphics(graphics); + } + + if (stat != Ok) + { + GdipDisposeImage(*ret_image); + *ret_image = NULL; + } + } + + return stat; }
/***************************************************************************** diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 8abb40c..0e33049 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -1219,16 +1219,16 @@ static void test_getthumbnail(void) UINT width, height;
stat = GdipGetImageThumbnail(NULL, 0, 0, &bitmap2, NULL, NULL); - todo_wine expect(InvalidParameter, stat); + expect(InvalidParameter, stat);
stat = GdipCreateBitmapFromScan0(128, 128, 0, PixelFormat32bppRGB, NULL, (GpBitmap**)&bitmap1); expect(Ok, stat);
stat = GdipGetImageThumbnail(bitmap1, 0, 0, NULL, NULL, NULL); - todo_wine expect(InvalidParameter, stat); + expect(InvalidParameter, stat);
stat = GdipGetImageThumbnail(bitmap1, 0, 0, &bitmap2, NULL, NULL); - todo_wine expect(Ok, stat); + expect(Ok, stat);
if (stat == Ok) { @@ -1250,7 +1250,7 @@ static void test_getthumbnail(void) expect(Ok, stat);
stat = GdipGetImageThumbnail(bitmap1, 32, 32, &bitmap2, NULL, NULL); - todo_wine expect(Ok, stat); + expect(Ok, stat);
if (stat == Ok) { @@ -1266,7 +1266,7 @@ static void test_getthumbnail(void) }
stat = GdipGetImageThumbnail(bitmap1, 0, 0, &bitmap2, NULL, NULL); - todo_wine expect(Ok, stat); + expect(Ok, stat);
if (stat == Ok) {