[Gdiplus 4/4] Implement GdipCloneImage
Adam Petaccia
adam at tpetaccia.com
Tue Jul 1 20:41:22 CDT 2008
---
dlls/gdiplus/image.c | 19 +++++++++++++++++--
dlls/gdiplus/tests/image.c | 6 ------
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index bf2ac35..59ea837 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -244,9 +244,24 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage)
{
if (!(image && cloneImage)) return InvalidParameter;
- FIXME("stub: %p, %p", image, cloneImage);
+ TRACE("%p, %p", image, cloneImage);
- return NotImplemented;
+ *cloneImage = GdipAlloc(sizeof(GpImage));
+ if (!*cloneImage)
+ return OutOfMemory;
+
+ memcpy(*cloneImage, image, sizeof(GpImage));
+
+ (*cloneImage)->picture = GdipAlloc(sizeof(IPicture));
+ if (!(*cloneImage)->picture)
+ {
+ GdipFree(*cloneImage);
+ return OutOfMemory;
+ }
+
+ memcpy((*cloneImage)->picture, image->picture, sizeof(IPicture));
+
+ return Ok;
}
GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename,
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 38a58b9..1c7c3ab 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -490,22 +490,16 @@ static void test_GdipCloneImage(void)
/* Create an image, clone it, delete the original, make sure the copy works */
stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
expect(Ok, stat);
-todo_wine
-{
image_src = ((GpImage*)bm);
stat = GdipCloneImage(image_src, &image_dest);
expect(Ok, stat);
-}
stat = GdipDisposeImage((GpImage*)bm);
expect(Ok, stat);
-todo_wine
-{
stat = GdipGetImageBounds(image_dest, &rectF, &unit);
expect(Ok, stat);
stat = GdipDisposeImage(image_dest);
expect(Ok, stat);
}
-}
START_TEST(image)
{
--
1.5.4.3
More information about the wine-patches
mailing list