Module: wine Branch: master Commit: b528e01d85e4e81f670f7b2f80bb87fcf5451d19 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b528e01d85e4e81f670f7b2f80...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Fri Oct 18 14:04:56 2013 +0900
gdiplus: Reimplement GdipCloneImage using GdipCloneBitmapArea for a bitmap.
---
dlls/gdiplus/image.c | 43 +++---------------------------------------- 1 files changed, 3 insertions(+), 40 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 83b0b08..b9e5b84 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -1312,47 +1312,10 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) } else if (image->type == ImageTypeBitmap) { - GpBitmap *bitmap = (GpBitmap*)image; - BitmapData lockeddata_src, lockeddata_dst; - int i; - UINT row_size; + GpBitmap *bitmap = (GpBitmap *)image;
- stat = GdipBitmapLockBits(bitmap, NULL, ImageLockModeRead, bitmap->format, - &lockeddata_src); - if (stat != Ok) return stat; - - stat = GdipCreateBitmapFromScan0(lockeddata_src.Width, lockeddata_src.Height, - 0, lockeddata_src.PixelFormat, NULL, (GpBitmap**)cloneImage); - if (stat == Ok) - { - stat = GdipBitmapLockBits((GpBitmap*)*cloneImage, NULL, ImageLockModeWrite, - lockeddata_src.PixelFormat, &lockeddata_dst); - - if (stat == Ok) - { - /* copy the image data */ - row_size = (lockeddata_src.Width * PIXELFORMATBPP(lockeddata_src.PixelFormat) +7)/8; - for (i=0; i<lockeddata_src.Height; i++) - memcpy((BYTE*)lockeddata_dst.Scan0+lockeddata_dst.Stride*i, - (BYTE*)lockeddata_src.Scan0+lockeddata_src.Stride*i, - row_size); - - GdipBitmapUnlockBits((GpBitmap*)*cloneImage, &lockeddata_dst); - } - - if (stat != Ok) - GdipDisposeImage(*cloneImage); - } - - GdipBitmapUnlockBits(bitmap, &lockeddata_src); - - if (stat != Ok) - { - *cloneImage = NULL; - } - else memcpy(&(*cloneImage)->format, &image->format, sizeof(GUID)); - - return stat; + return GdipCloneBitmapAreaI(0, 0, bitmap->width, bitmap->height, + bitmap->format, bitmap, (GpBitmap **)cloneImage); } else if (image->type == ImageTypeMetafile && ((GpMetafile*)image)->hemf) {