Alexandre Julliard : gdi32: Use SetDIBits to set the initial bits of a DDB.
Alexandre Julliard
julliard at winehq.org
Wed Aug 31 13:19:19 CDT 2011
Module: wine
Branch: master
Commit: e7c523b135a8e36c22df34e518690e134db27448
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e7c523b135a8e36c22df34e518690e134db27448
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Aug 30 21:26:02 2011 +0200
gdi32: Use SetDIBits to set the initial bits of a DDB.
---
dlls/gdi32/bitmap.c | 44 +++-----------------------------------------
1 files changed, 3 insertions(+), 41 deletions(-)
diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c
index 5790248..3a4caca 100644
--- a/dlls/gdi32/bitmap.c
+++ b/dlls/gdi32/bitmap.c
@@ -609,52 +609,14 @@ static void set_initial_bitmap_bits( HBITMAP hbitmap, BITMAPOBJ *bmp )
{
char buffer[FIELD_OFFSET( BITMAPINFO, bmiColors[256] )];
BITMAPINFO *info = (BITMAPINFO *)buffer;
- DWORD err;
- int width_bytes;
- struct bitblt_coords src, dst;
- struct gdi_image_bits bits;
if (!bmp->bitmap.bmBits) return;
if (bmp->funcs->pPutImage == nulldrv_PutImage) return;
- width_bytes = get_dib_stride( bmp->bitmap.bmWidth, bmp->bitmap.bmBitsPixel );
-
- src.visrect.left = src.x = 0;
- src.visrect.top = src.y = 0;
- src.visrect.right = src.width = bmp->bitmap.bmWidth;
- src.visrect.bottom = src.height = bmp->bitmap.bmHeight;
- dst = src;
-
- bits.ptr = bmp->bitmap.bmBits;
- bits.is_copy = TRUE;
- bits.free = free_heap_bits;
+ get_ddb_bitmapinfo( bmp, info );
+ SetDIBits( 0, hbitmap, 0, bmp->bitmap.bmHeight, bmp->bitmap.bmBits, info, DIB_RGB_COLORS );
+ HeapFree( GetProcessHeap(), 0, bmp->bitmap.bmBits );
bmp->bitmap.bmBits = NULL;
-
- /* query the color info */
- info->bmiHeader.biSize = sizeof(info->bmiHeader);
- info->bmiHeader.biPlanes = 1;
- info->bmiHeader.biBitCount = bmp->bitmap.bmBitsPixel;
- info->bmiHeader.biCompression = BI_RGB;
- info->bmiHeader.biXPelsPerMeter = 0;
- info->bmiHeader.biYPelsPerMeter = 0;
- info->bmiHeader.biClrUsed = 0;
- info->bmiHeader.biClrImportant = 0;
- info->bmiHeader.biWidth = 0;
- info->bmiHeader.biHeight = 0;
- info->bmiHeader.biSizeImage = 0;
- err = bmp->funcs->pPutImage( NULL, hbitmap, 0, info, NULL, NULL, NULL, SRCCOPY );
-
- if (!err || err == ERROR_BAD_FORMAT)
- {
- info->bmiHeader.biPlanes = 1;
- info->bmiHeader.biBitCount = bmp->bitmap.bmBitsPixel;
- info->bmiHeader.biWidth = bmp->bitmap.bmWidth;
- info->bmiHeader.biHeight = -dst.height;
- info->bmiHeader.biSizeImage = dst.height * width_bytes;
- bmp->funcs->pPutImage( NULL, hbitmap, 0, info, &bits, &src, &dst, SRCCOPY );
- }
-
- if (bits.free) bits.free( &bits );
}
/***********************************************************************
More information about the wine-cvs
mailing list