Commit 5870431a authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

gdiplus: Force conversion of 8 bpp grayscale PNG images to 32 bpp BGRA.

parent cc49c40f
...@@ -3961,7 +3961,37 @@ static GpStatus decode_image_jpeg(IStream* stream, GpImage **image) ...@@ -3961,7 +3961,37 @@ static GpStatus decode_image_jpeg(IStream* stream, GpImage **image)
static GpStatus decode_image_png(IStream* stream, GpImage **image) static GpStatus decode_image_png(IStream* stream, GpImage **image)
{ {
return decode_image_wic(stream, &GUID_ContainerFormatPng, png_metadata_reader, image); IWICBitmapDecoder *decoder;
IWICBitmapFrameDecode *frame;
GpStatus status;
HRESULT hr;
GUID format;
BOOL force_conversion = FALSE;
status = initialize_decoder_wic(stream, &GUID_ContainerFormatPng, &decoder);
if (status != Ok)
return status;
hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame);
if (hr == S_OK)
{
hr = IWICBitmapFrameDecode_GetPixelFormat(frame, &format);
if (hr == S_OK)
{
if (IsEqualGUID(&format, &GUID_WICPixelFormat8bppGray))
force_conversion = TRUE;
status = decode_frame_wic(decoder, force_conversion, 0, png_metadata_reader, image);
}
else
status = hresult_to_status(hr);
IWICBitmapFrameDecode_Release(frame);
}
else
status = hresult_to_status(hr);
IWICBitmapDecoder_Release(decoder);
return status;
} }
static GpStatus decode_image_gif(IStream* stream, GpImage **image) static GpStatus decode_image_gif(IStream* stream, GpImage **image)
......
...@@ -5014,7 +5014,6 @@ static void test_png_color_formats(void) ...@@ -5014,7 +5014,6 @@ static void test_png_color_formats(void)
status = GdipGetImagePixelFormat(image, &format); status = GdipGetImagePixelFormat(image, &format);
expect(Ok, status); expect(Ok, status);
todo_wine_if(td[i].bit_depth == 8 && td[i].color_type == 0)
ok(format == td[i].format || ok(format == td[i].format ||
broken(td[i].bit_depth == 1 && td[i].color_type == 0 && format == PixelFormat32bppARGB), /* XP */ broken(td[i].bit_depth == 1 && td[i].color_type == 0 && format == PixelFormat32bppARGB), /* XP */
"%d: expected %#x, got %#x\n", i, td[i].format, format); "%d: expected %#x, got %#x\n", i, td[i].format, format);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment