From 7e2be17d0f1442559dae38c2982bf4d424ace65a Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 13 Dec 2005 17:07:06 +0100 Subject: [PATCH] gdi: Added support for doing GetBitmapBits on a DIB section. Simply copy the DIB bits in that case. --- dlls/gdi/bitmap.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dlls/gdi/bitmap.c b/dlls/gdi/bitmap.c index a0c6b25802..5c2b6c33c2 100644 --- a/dlls/gdi/bitmap.c +++ b/dlls/gdi/bitmap.c @@ -307,6 +307,30 @@ LONG WINAPI GetBitmapBits( if (!bmp) return 0; + if (bmp->dib) /* simply copy the bits from the DIB */ + { + DIBSECTION *dib = bmp->dib; + const char *src = dib->dsBm.bmBits; + DWORD max = dib->dsBm.bmWidthBytes * dib->dsBm.bmHeight; + if (count > max) count = max; + ret = count; + if (!bits) goto done; + + if (bmp->dib->dsBmih.biHeight >= 0) /* not top-down, need to flip contents vertically */ + { + src += dib->dsBm.bmWidthBytes * dib->dsBm.bmHeight; + while (count > 0) + { + src -= dib->dsBm.bmWidthBytes; + memcpy( bits, src, min( count, dib->dsBm.bmWidthBytes ) ); + bits = (char *)bits + dib->dsBm.bmWidthBytes; + count -= dib->dsBm.bmWidthBytes; + } + } + else memcpy( bits, src, count ); + goto done; + } + /* If the bits vector is null, the function should return the read size */ if(bits == NULL) {