From: Bartosz Kosiorek <gang65@poczta.onet.pl> --- dlls/gdiplus/image.c | 10 ++++++++-- dlls/gdiplus/tests/image.c | 10 ---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 68eaa177163..17e1437eb5f 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -6220,11 +6220,17 @@ GpStatus WINGDIPAPI GdipInitializePalette(ColorPalette *palette, wic_palette = get_palette(NULL, (WICBitmapPaletteType)type); if (!wic_palette) return OutOfMemory; - if (palette->Count >= wic_palette->Count) + if (palette->Count >= wic_palette->Count + (transparent ? 1 : 0)) { - palette->Flags = wic_palette->Flags; + palette->Flags = (UINT)type << 8; palette->Count = wic_palette->Count; memcpy(palette->Entries, wic_palette->Entries, wic_palette->Count * sizeof(wic_palette->Entries[0])); + if (transparent) + { + /* If there is transparent color, add additional entry to palette */ + palette->Entries[palette->Count] = 0x00000000; + palette->Count++; + } } else status = GenericError; diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 41b929b21d4..a1b81c8eda7 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -6512,7 +6512,6 @@ static void test_GdipInitializePalette(void) palette->Count = 256; status = pGdipInitializePalette(palette, PaletteTypeFixedBW, 0, FALSE, bitmap); expect(Ok, status); - todo_wine expect(0x200, palette->Flags); expect(2, palette->Count); expect(0xff000000, palette->Entries[0]); @@ -6523,7 +6522,6 @@ static void test_GdipInitializePalette(void) palette->Count = 256; status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone8, 1, FALSE, NULL); expect(Ok, status); - todo_wine expect(0x300, palette->Flags); expect(16, palette->Count); expect(0xff000000, palette->Entries[0]); @@ -6536,7 +6534,6 @@ static void test_GdipInitializePalette(void) palette->Count = 256; status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone8, 1, FALSE, bitmap); expect(Ok, status); - todo_wine expect(0x300, palette->Flags); expect(16, palette->Count); expect(0xff000000, palette->Entries[0]); @@ -6549,14 +6546,11 @@ static void test_GdipInitializePalette(void) palette->Count = 256; status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone8, 1, TRUE, bitmap); expect(Ok, status); - todo_wine expect(0x300, palette->Flags); - todo_wine expect(17, palette->Count); expect(0xff000000, palette->Entries[0]); expect(0xffc0c0c0, palette->Entries[8]); expect(0xff008080, palette->Entries[15]); - todo_wine expect(0x00000000, palette->Entries[16]); memset(palette->Entries, 0x11, sizeof(ARGB) * 256); @@ -6564,16 +6558,13 @@ static void test_GdipInitializePalette(void) palette->Count = 256; status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone64, 1, TRUE, bitmap); expect(Ok, status); - todo_wine expect(0x500, palette->Flags); - todo_wine expect(73, palette->Count); expect(0xff000000, palette->Entries[0]); expect(0xff00aa00, palette->Entries[8]); expect(0xff00ffff, palette->Entries[15]); expect(0xffaa0000, palette->Entries[32]); expect(0xff008080, palette->Entries[71]); - todo_wine expect(0x00000000, palette->Entries[72]); memset(palette->Entries, 0x11, sizeof(ARGB) * 256); @@ -6581,7 +6572,6 @@ static void test_GdipInitializePalette(void) palette->Count = 256; status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone252, 1, FALSE, bitmap); expect(Ok, status); - todo_wine expect(0x800, palette->Flags); expect(252, palette->Count); expect(0xff000000, palette->Entries[0]); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10745