From c2784e08fcac04ff0e6106292c1b9bf93acfc27c Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 29 May 2012 13:53:30 +0200 Subject: [PATCH] gdi32: Improve support of bitmaps without a color table in PutImage. --- dlls/gdi32/dibdrv/bitblt.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c index d6849bd14b4..5abfd75d85f 100644 --- a/dlls/gdi32/dibdrv/bitblt.c +++ b/dlls/gdi32/dibdrv/bitblt.c @@ -871,16 +871,25 @@ done: static BOOL matching_color_info( const dib_info *dib, const BITMAPINFO *info ) { + const RGBQUAD *color_table = info->bmiColors; + switch (info->bmiHeader.biBitCount) { case 1: - case 4: - case 8: - { - RGBQUAD *color_table = (RGBQUAD *)((char *)info + info->bmiHeader.biSize); if (dib->color_table_size != info->bmiHeader.biClrUsed) return FALSE; return !memcmp( color_table, dib->color_table, dib->color_table_size * sizeof(RGBQUAD) ); - } + + case 4: + case 8: + if (!info->bmiHeader.biClrUsed) + { + if (!dib->color_table_size) return TRUE; + if (dib->color_table_size != 1 << info->bmiHeader.biBitCount) return FALSE; + color_table = get_default_color_table( info->bmiHeader.biBitCount ); + } + else if (dib->color_table_size != info->bmiHeader.biClrUsed) return FALSE; + + return !memcmp( color_table, dib->color_table, dib->color_table_size * sizeof(RGBQUAD) ); case 16: {