Alexandre Julliard : gdi32: Improve support of bitmaps without a color table in PutImage.

Alexandre Julliard julliard at winehq.org
Tue May 29 13:58:03 CDT 2012


Module: wine
Branch: master
Commit: c2784e08fcac04ff0e6106292c1b9bf93acfc27c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c2784e08fcac04ff0e6106292c1b9bf93acfc27c

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue May 29 13:53:30 2012 +0200

gdi32: Improve support of bitmaps without a color table in PutImage.

---

 dlls/gdi32/dibdrv/bitblt.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c
index d6849bd..5abfd75 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:
+        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:
-    {
-        RGBQUAD *color_table = (RGBQUAD *)((char *)info + info->bmiHeader.biSize);
-        if (dib->color_table_size != info->bmiHeader.biClrUsed) return FALSE;
+        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:
     {




More information about the wine-cvs mailing list