Piotr Caban : gdiplus: Fixed palette flags setting.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Mar 16 10:34:23 CDT 2015
Module: wine
Branch: master
Commit: 59eef10f345ec7162bca4c3e0bf8a436af7f2cef
URL: http://source.winehq.org/git/wine.git/?a=commit;h=59eef10f345ec7162bca4c3e0bf8a436af7f2cef
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Mar 13 15:14:37 2015 +0100
gdiplus: Fixed palette flags setting.
---
dlls/gdiplus/image.c | 34 ++++++++++++++++++++++++----------
dlls/gdiplus/tests/image.c | 23 +++++++++++++++++++++++
2 files changed, 47 insertions(+), 10 deletions(-)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 4bce334..8eb1419 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -87,22 +87,36 @@ static ColorPalette *get_palette(IWICBitmapFrameDecode *frame, WICBitmapPaletteT
}
if (hr == S_OK)
{
+ WICBitmapPaletteType type;
+ BOOL alpha;
UINT count;
- BOOL mono, gray;
-
- IWICPalette_IsBlackWhite(wic_palette, &mono);
- IWICPalette_IsGrayscale(wic_palette, &gray);
IWICPalette_GetColorCount(wic_palette, &count);
palette = HeapAlloc(GetProcessHeap(), 0, 2 * sizeof(UINT) + count * sizeof(ARGB));
IWICPalette_GetColors(wic_palette, count, palette->Entries, &palette->Count);
- if (mono)
- palette->Flags = 0;
- else if (gray)
- palette->Flags = PaletteFlagsGrayScale;
- else
- palette->Flags = PaletteFlagsHalftone;
+ IWICPalette_GetType(wic_palette, &type);
+ switch(type) {
+ case WICBitmapPaletteTypeFixedGray4:
+ case WICBitmapPaletteTypeFixedGray16:
+ case WICBitmapPaletteTypeFixedGray256:
+ palette->Flags = PaletteFlagsGrayScale;
+ break;
+ case WICBitmapPaletteTypeFixedHalftone8:
+ case WICBitmapPaletteTypeFixedHalftone27:
+ case WICBitmapPaletteTypeFixedHalftone64:
+ case WICBitmapPaletteTypeFixedHalftone125:
+ case WICBitmapPaletteTypeFixedHalftone216:
+ case WICBitmapPaletteTypeFixedHalftone252:
+ case WICBitmapPaletteTypeFixedHalftone256:
+ palette->Flags = PaletteFlagsHalftone;
+ break;
+ default:
+ palette->Flags = 0;
+ }
+ IWICPalette_HasAlpha(wic_palette, &alpha);
+ if(alpha)
+ palette->Flags |= PaletteFlagsHasAlpha;
}
IWICPalette_Release(wic_palette);
}
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 91f70b5..68a06c4 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -2487,6 +2487,9 @@ static void test_multiframegif(void)
GUID dimension;
PixelFormat pixel_format;
INT palette_size, i, j;
+ char palette_buf[256];
+ ColorPalette *palette;
+ ARGB *palette_entries;
/* Test frame functions with an animated GIF */
hglob = GlobalAlloc (0, sizeof(gifanimation));
@@ -2644,6 +2647,26 @@ static void test_multiframegif(void)
expect(Ok, stat);
expect(PixelFormat8bppIndexed, pixel_format);
+ stat = GdipBitmapGetPixel(bmp, 0, 0, &color);
+ expect(Ok, stat);
+ expect(0, color);
+
+ stat = GdipGetImagePaletteSize((GpImage*)bmp, &palette_size);
+ expect(Ok, stat);
+ ok(palette_size == sizeof(ColorPalette)+sizeof(ARGB),
+ "palette_size = %d\n", palette_size);
+
+ memset(palette_buf, 0xfe, sizeof(palette_buf));
+ palette = (ColorPalette*)palette_buf;
+ stat = GdipGetImagePalette((GpImage*)bmp, palette,
+ sizeof(ColorPalette)+sizeof(ARGB));
+ palette_entries = palette->Entries;
+ expect(Ok, stat);
+ expect(PaletteFlagsHasAlpha, palette->Flags);
+ expect(2, palette->Count);
+ expect(0, palette_entries[0]);
+ expect(0xff000000, palette_entries[1]);
+
count = 12345;
stat = GdipImageGetFrameCount((GpImage*)bmp, &dimension, &count);
expect(Ok, stat);
More information about the wine-cvs
mailing list