Report a todo and skip DIB tests when they fail at a non-truecolor
screen depth.

diff --git a/dlls/gdi/tests/bitmap.c b/dlls/gdi/tests/bitmap.c
index 49e6d66..dbbb81b 100644
--- a/dlls/gdi/tests/bitmap.c
+++ b/dlls/gdi/tests/bitmap.c
@@ -160,8 +160,12 @@
 }
 
 #define test_color_todo(got, exp, txt, todo) \
-    if (todo) todo_wine { ok(got == exp, #txt " failed: got 0x%06x expected 0x%06x\n", (UINT)got, (UINT)exp); } \
-    else ok(got == exp, #txt " failed: got 0x%06x expected 0x%06x\n", (UINT)got, (UINT)exp)
+    if (!todo && got != exp && screen_depth < 24) { \
+      todo_wine ok(0, #txt " failed at %d-bit screen depth: got 0x%06x expected 0x%06x - skipping DIB tests\n", \
+                   screen_depth, (UINT)got, (UINT)exp); \
+      return; \
+    } else if (todo) todo_wine { ok(got == exp, #txt " failed: got 0x%06x expected 0x%06x\n", (UINT)got, (UINT)exp); } \
+    else ok(got == exp, #txt " failed: got 0x%06x expected 0x%06x\n", (UINT)got, (UINT)exp) \
 
 #define test_color(hdc, color, exp, todo_setp, todo_getp) \
 { \
@@ -192,8 +196,10 @@
     HPALETTE hpal, oldpal;
     COLORREF c0, c1;
     int i;
+    int screen_depth;
 
     hdc = GetDC(0);
+    screen_depth = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
     memset(pbmi, 0, sizeof(bmibuf));
     pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader);
     pbmi->bmiHeader.biHeight = 16;