[4/4] gdiplus: Add support for reading png gAMA chunks.
Vincent Povirk
madewokherd at gmail.com
Mon Apr 6 17:01:08 CDT 2015
-------------- next part --------------
From ba98cda5f3b6c3c625abfc34f63ad6ca489ccb5f Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Wed, 1 Apr 2015 15:26:00 -0500
Subject: [PATCH 04/14] gdiplus: Add support for reading png gAMA chunks.
---
dlls/gdiplus/image.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 643cf6c..86802a5 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -3436,6 +3436,29 @@ static PropertyItem* create_prop(PROPID propid, PROPVARIANT* value)
return item;
}
+static ULONG get_ulong_by_index(IWICMetadataReader* reader, ULONG index)
+{
+ PROPVARIANT value;
+ HRESULT hr;
+ ULONG result=0;
+
+ hr = IWICMetadataReader_GetValueByIndex(reader, index, NULL, NULL, &value);
+ if (SUCCEEDED(hr))
+ {
+ switch (value.vt)
+ {
+ case VT_UI4:
+ result = value.u.ulVal;
+ break;
+ default:
+ ERR("unhandled case %u\n", value.vt);
+ break;
+ }
+ PropVariantClear(&value);
+ }
+ return result;
+}
+
static void png_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UINT active_frame)
{
HRESULT hr;
@@ -3456,6 +3479,7 @@ static void png_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UI
{ "Source", PropertyTagEquipModel },
{ "Comment", PropertyTagExifUserComment },
};
+ BOOL seen_gamma=FALSE;
hr = IWICBitmapDecoder_GetFrame(decoder, active_frame, &frame);
if (hr != S_OK) return;
@@ -3502,6 +3526,28 @@ static void png_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UI
PropVariantClear(&value);
}
}
+ else if (SUCCEEDED(hr) && IsEqualGUID(&GUID_MetadataFormatChunkgAMA, &format))
+ {
+ PropertyItem* item;
+
+ if (!seen_gamma)
+ {
+ item = GdipAlloc(sizeof(PropertyItem) + sizeof(ULONG) * 2);
+ if (item)
+ {
+ ULONG *rational;
+ item->length = sizeof(ULONG) * 2;
+ item->type = PropertyTagTypeRational;
+ item->id = PropertyTagGamma;
+ rational = item->value = item + 1;
+ rational[0] = 100000;
+ rational[1] = get_ulong_by_index(reader, 0);
+ add_property(bitmap, item);
+ seen_gamma = TRUE;
+ GdipFree(item);
+ }
+ }
+ }
IWICMetadataReader_Release(reader);
}
--
2.1.0
More information about the wine-patches
mailing list