From 3e4678185f2161ef37cc855f829192a855f9a002 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Mon, 8 Jan 2024 20:34:50 +0200 Subject: [PATCH] 256 color screenshot fix --- od-win32/screenshot.cpp | 48 +++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/od-win32/screenshot.cpp b/od-win32/screenshot.cpp index 46a73ba2..413f414f 100644 --- a/od-win32/screenshot.cpp +++ b/od-win32/screenshot.cpp @@ -658,6 +658,13 @@ static void count_colors(bool alpha) if (!palettebm) { return; } + palettecount = 0; + uae_u8 r, g, b; + if (get_custom_color_reg(0, &r, &g, &b)) { + palettea[palettecount] = true; + palette[palettecount] = (b << 16) | (g << 8) | r; + palettecount++; + } for (int i = 0; i < h; i++) { uae_u8 *p = (uae_u8*)lpvBits + i * ((((w * 24) + 31) & ~31) / 8); for (int j = 0; j < w; j++) { @@ -683,22 +690,31 @@ static void count_colors(bool alpha) return; } palettea[palettecount] = true; - c = palettecount++; - palette[c] = co; + palette[palettecount] = co; + palettecount++; } } } write_log("Screenshot color count: %d\n", palettecount); // get custom colors - int customcolorcnt = 0; for (int i = 0; i < 256; i++) { uniquecolors[i] = 0; uniquecolorsa[i] = false; - uae_u8 r, g, b; - if (get_custom_color_reg(i, &r, &g, &b)) { - uniquecolors[i] = (b << 16) | (g << 8) | r; - customcolorcnt = i + 1; + } + int customcolorcnt = 0; + for (int i = 0; i < 256; i++) { + if (!get_custom_color_reg(i, &r, &g, &b)) + break; + uae_u32 co = (b << 16) | (g << 8) | r; + int j = 0; + for (j = 0; j < customcolorcnt; j++) { + if (uniquecolors[i] == co) + break; + } + if (j >= customcolorcnt) { + uniquecolors[i] = co; + customcolorcnt++; } } // find matching colors from bitmap and allocate colors @@ -708,10 +724,10 @@ static void count_colors(bool alpha) uae_u32 cc = palette[i]; for (int j = 0; j < customcolorcnt; j++) { uae_u32 cc2 = uniquecolors[j]; - if (!uniquecolorsa[i] && cc == cc2) { - uniquecolorsa[i] = true; - if (i >= uniquecolorcount) { - uniquecolorcount = i + 1; + if (!uniquecolorsa[j] && cc == cc2) { + uniquecolorsa[j] = true; + if (j >= uniquecolorcount) { + uniquecolorcount = j + 1; } palettea[i] = false; match++; @@ -729,7 +745,7 @@ static void count_colors(bool alpha) if (uniquecolorcount < safecolors) { uniquecolorcount = safecolors; } - for (int i = 0; i < 256; i++) { + for (int i = 0; i < palettecount; i++) { if (palettea[i]) { int j = 0; for (j = safecolors; j < 256 + safecolors; j++) { @@ -768,15 +784,15 @@ static void count_colors(bool alpha) if (prevc >= 0 && co == uniquecolors[prevc]) { c = prevc; } else { - for (c = 0; c < uniquecolorcount; c++) { + for (c = 0; c < 256; c++) { if (uniquecolors[c] == co) { prevc = c; + if (c > uniquecolorcount) { + uniquecolorcount = c + 1; + } break; } } - if (c >= uniquecolorcount) { - c++; - } } *dp++ = (uae_u8)c; } -- 2.47.3