Module: wine Branch: master Commit: 9497e9380b8f87fe456c844ac49db4210c0dd7bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=9497e9380b8f87fe456c844ac4...
Author: Vincent Povirk vincent@codeweavers.com Date: Thu Feb 24 16:12:43 2011 -0600
gdiplus: Don't copy bits into the buffer when a bitmap is locked write-only.
---
dlls/gdiplus/image.c | 28 +++++++++++++++++----------- 1 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 3c4e9bf..2139e97 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -968,11 +968,14 @@ GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap* bitmap, GDIPCONST GpRect* rect, }
/* Make sure we can convert to the requested format. */ - stat = convert_pixels(0, 0, 0, NULL, format, 0, NULL, bitmap->format, NULL); - if (stat == NotImplemented) + if (flags & ImageLockModeRead) { - FIXME("cannot read bitmap from %x to %x\n", bitmap->format, format); - return NotImplemented; + stat = convert_pixels(0, 0, 0, NULL, format, 0, NULL, bitmap->format, NULL); + if (stat == NotImplemented) + { + FIXME("cannot read bitmap from %x to %x\n", bitmap->format, format); + return NotImplemented; + } }
/* If we're opening for writing, make sure we'll be able to write back in @@ -995,14 +998,17 @@ GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap* bitmap, GDIPCONST GpRect* rect,
if (!buff) return OutOfMemory;
- stat = convert_pixels(bitmap->width, bitmap->height, - stride, buff, format, - bitmap->stride, bitmap->bits, bitmap->format, bitmap->image.palette_entries); - - if (stat != Ok) + if (flags & ImageLockModeRead) { - GdipFree(buff); - return stat; + stat = convert_pixels(bitmap->width, bitmap->height, + stride, buff, format, + bitmap->stride, bitmap->bits, bitmap->format, bitmap->image.palette_entries); + + if (stat != Ok) + { + GdipFree(buff); + return stat; + } }
lockeddata->Width = act_rect.Width;