[PATCH 5/5] user32: Select more appropriate stretch mode for colored images interpolation.

Paul Gofman gofmanp at gmail.com
Wed Jan 9 06:49:36 CST 2019


For bug https://bugs.winehq.org/show_bug.cgi?id=46375.

Signed-off-by: Paul Gofman <gofmanp at gmail.com>
---
 dlls/user32/cursoricon.c       | 4 ++++
 dlls/user32/tests/cursoricon.c | 4 ++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 539fc7ca54..3214746664 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -2976,6 +2976,8 @@ static HBITMAP BITMAP_Load( HINSTANCE instance, LPCWSTR name,
     }
 
     orig_bm = SelectObject(screen_mem_dc, hbitmap);
+    if (info->bmiHeader.biBitCount > 1)
+        SetStretchBltMode(screen_mem_dc, HALFTONE);
     StretchDIBits(screen_mem_dc, 0, 0, new_width, new_height, 0, 0, width, height, bits, fix_info, DIB_RGB_COLORS, SRCCOPY);
     SelectObject(screen_mem_dc, orig_bm);
 
@@ -3217,6 +3219,8 @@ HANDLE WINAPI CopyImage( HANDLE hnd, UINT type, INT desiredx,
                     void * bits;
 
                     dc = CreateCompatibleDC(NULL);
+                    if (ds.dsBm.bmBitsPixel > 1)
+                        SetStretchBltMode(dc, HALFTONE);
 
                     bi->bmiHeader.biWidth = ds.dsBm.bmWidth;
                     bi->bmiHeader.biHeight = ds.dsBm.bmHeight;
diff --git a/dlls/user32/tests/cursoricon.c b/dlls/user32/tests/cursoricon.c
index e5ff215b4f..bb88e2e196 100644
--- a/dlls/user32/tests/cursoricon.c
+++ b/dlls/user32/tests/cursoricon.c
@@ -2918,9 +2918,9 @@ static void test_Image_StretchMode(void)
                 sizeof(colors_bits_1), FALSE},
         {4, 4, 2, 2, 8, test_bits_8, expected_bits_8,
                 sizeof(test_bits_8), sizeof(expected_bits_8), colors_bits_8,
-                sizeof(colors_bits_8), TRUE},
+                sizeof(colors_bits_8), FALSE},
         {4, 4, 2, 2, 16, (const unsigned char *)test_bits_16, (const unsigned char *)expected_bits_16,
-                sizeof(test_bits_16), sizeof(expected_bits_16), NULL, 0, TRUE},
+                sizeof(test_bits_16), sizeof(expected_bits_16), NULL, 0, FALSE},
     };
     static const char filename[] = "test.bmp";
     BITMAPINFO *bmi, *bmi_output;
-- 
2.20.1




More information about the wine-devel mailing list