From a9fb4e7b3953cf5ee453523a305f09f3d71d6efc Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 27 Aug 2009 13:23:18 -0500 Subject: [PATCH] windowscodecs: implement conversion from 2bppGray to 32bppBGRA --- dlls/windowscodecs/converter.c | 32 +++++++++++++++++++++++++------- dlls/windowscodecs/regsvr.c | 1 + 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/dlls/windowscodecs/converter.c b/dlls/windowscodecs/converter.c index 3ea0b2e..8ec1114 100644 --- a/dlls/windowscodecs/converter.c +++ b/dlls/windowscodecs/converter.c @@ -41,6 +41,7 @@ enum pixelformat { format_4bppIndexed, format_8bppIndexed, format_BlackWhite, + format_2bppGray, format_8bppGray, format_16bppBGR555, format_16bppBGR565, @@ -68,6 +69,16 @@ typedef struct FormatConverter { WICBitmapPaletteType palette_type; } FormatConverter; +static void make_grayscale_palette(WICColor *colors, UINT num_colors) +{ + int i, v; + for (i=0; isource, palette); - if (SUCCEEDED(res)) - res = IWICPalette_GetColors(palette, 4, colors, &actualcolors); + res = IWICBitmapSource_CopyPalette(This->source, palette); + if (SUCCEEDED(res)) + res = IWICPalette_GetColors(palette, 4, colors, &actualcolors); - IWICPalette_Release(palette); + IWICPalette_Release(palette); - if (FAILED(res)) return res; + if (FAILED(res)) return res; + } + else + make_grayscale_palette(colors, 4); srcstride = (prc->Width+3)/4; srcdatasize = srcstride * prc->Height; @@ -540,6 +557,7 @@ static const struct pixelformatinfo supported_formats[] = { {format_4bppIndexed, &GUID_WICPixelFormat4bppIndexed, NULL}, {format_8bppIndexed, &GUID_WICPixelFormat8bppIndexed, NULL}, {format_BlackWhite, &GUID_WICPixelFormatBlackWhite, NULL}, + {format_2bppGray, &GUID_WICPixelFormat2bppGray, NULL}, {format_8bppGray, &GUID_WICPixelFormat8bppGray, NULL}, {format_16bppBGR555, &GUID_WICPixelFormat16bppBGR555, NULL}, {format_16bppBGR565, &GUID_WICPixelFormat16bppBGR565, NULL}, diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c index 4a38849..0e857f5 100644 --- a/dlls/windowscodecs/regsvr.c +++ b/dlls/windowscodecs/regsvr.c @@ -922,6 +922,7 @@ static GUID const * const converter_formats[] = { &GUID_WICPixelFormat4bppIndexed, &GUID_WICPixelFormat8bppIndexed, &GUID_WICPixelFormatBlackWhite, + &GUID_WICPixelFormat2bppGray, &GUID_WICPixelFormat8bppGray, &GUID_WICPixelFormat16bppBGR555, &GUID_WICPixelFormat16bppBGR565, -- 1.5.4.3