gdi: Added support for doing GetBitmapBits on a DIB section.

Simply copy the DIB bits in that case.
This commit is contained in:
Alexandre Julliard 2005-12-13 17:07:06 +01:00
parent 6b1e75d278
commit 7e2be17d0f

View file

@ -307,6 +307,30 @@ LONG WINAPI GetBitmapBits(
if (!bmp) return 0; 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 the bits vector is null, the function should return the read size */
if(bits == NULL) if(bits == NULL)
{ {