Module: wine Branch: master Commit: 6a7f97f98f394ef3f42f971266bd4840a5822e1a URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a7f97f98f394ef3f42f971266...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Jul 23 12:43:45 2012 +0900
windowscodecs: Add support for generating WICBitmapPaletteTypeFixedHalftone27 palette.
---
dlls/windowscodecs/palette.c | 27 +++++++++++++++++++++++++++ dlls/windowscodecs/tests/palette.c | 21 +++++++++++++++++++++ 2 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/dlls/windowscodecs/palette.c b/dlls/windowscodecs/palette.c index 4541c7c..74438f6 100644 --- a/dlls/windowscodecs/palette.c +++ b/dlls/windowscodecs/palette.c @@ -160,6 +160,28 @@ static WICColor *generate_halftone8_palette(UINT *count) return entries; }
+static WICColor *generate_halftone27_palette(UINT *count) +{ + WICColor *entries; + UINT i; + + *count = 28; + entries = HeapAlloc(GetProcessHeap(), 0, 28 * sizeof(WICColor)); + if (!entries) return NULL; + + for (i = 0; i < 27; i++) + { + static const BYTE halftone_values[4] = { 0x00,0x80,0xff }; + entries[i] = 0xff000000; + entries[i] |= halftone_values[i%3]; + entries[i] |= halftone_values[(i/3)%3] << 8; + entries[i] |= halftone_values[(i/9)%3] << 16; + } + + entries[i] = 0xffc0c0c0; + return entries; +} + static WICColor *generate_halftone64_palette(UINT *count) { WICColor *entries; @@ -253,6 +275,11 @@ static HRESULT WINAPI PaletteImpl_InitializePredefined(IWICPalette *iface, if (!colors) return E_OUTOFMEMORY; break;
+ case WICBitmapPaletteTypeFixedHalftone27: + colors = generate_halftone27_palette(&count); + if (!colors) return E_OUTOFMEMORY; + break; + case WICBitmapPaletteTypeFixedHalftone64: colors = generate_halftone64_palette(&count); if (!colors) return E_OUTOFMEMORY; diff --git a/dlls/windowscodecs/tests/palette.c b/dlls/windowscodecs/tests/palette.c index 8e320c5..7c4c3d4 100644 --- a/dlls/windowscodecs/tests/palette.c +++ b/dlls/windowscodecs/tests/palette.c @@ -199,6 +199,24 @@ static void generate_halftone8_palette(DWORD *entries, UINT count) } }
+static void generate_halftone27_palette(DWORD *entries, UINT count) +{ + static const BYTE halftone_values[4] = { 0x00,0x80,0xff }; + UINT i; + + assert(count == 28); + + for (i = 0; i < 27; i++) + { + entries[i] = 0xff000000; + entries[i] |= halftone_values[i%3]; + entries[i] |= halftone_values[(i/3)%3] << 8; + entries[i] |= halftone_values[(i/9)%3] << 16; + } + + entries[i] = 0xffc0c0c0; +} + static void generate_halftone64_palette(DWORD *entries, UINT count) { static const BYTE halftone_values[4] = { 0x00,0x55,0xaa,0xff }; @@ -256,6 +274,7 @@ static void test_predefined_palette(void) { WICBitmapPaletteTypeFixedGray16, 0, 1, 16, { 0 } }, { WICBitmapPaletteTypeFixedGray256, 0, 1, 256, { 0 } }, { WICBitmapPaletteTypeFixedHalftone8, 0, 0, 16, { 0 } }, + { WICBitmapPaletteTypeFixedHalftone27, 0, 0, 28, { 0 } }, { WICBitmapPaletteTypeFixedHalftone64, 0, 0, 72, { 0 } }, { WICBitmapPaletteTypeFixedHalftone256, 0, 0, 256, { 0 } }, }; @@ -314,6 +333,8 @@ static void test_predefined_palette(void) generate_gray256_palette(td[i].color, td[i].count); else if (td[i].type == WICBitmapPaletteTypeFixedHalftone8) generate_halftone8_palette(td[i].color, td[i].count); + else if (td[i].type == WICBitmapPaletteTypeFixedHalftone27) + generate_halftone27_palette(td[i].color, td[i].count); else if (td[i].type == WICBitmapPaletteTypeFixedHalftone64) generate_halftone64_palette(td[i].color, td[i].count); else if (td[i].type == WICBitmapPaletteTypeFixedHalftone256)