gdiplus: Add support for reading png cHRM chunks.
Signed-off-by: Vincent Povirk <vincent@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2e16630a61
commit
bf4a2ba264
|
@ -3483,7 +3483,7 @@ static void png_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UI
|
||||||
{ "Source", PropertyTagEquipModel },
|
{ "Source", PropertyTagEquipModel },
|
||||||
{ "Comment", PropertyTagExifUserComment },
|
{ "Comment", PropertyTagExifUserComment },
|
||||||
};
|
};
|
||||||
BOOL seen_gamma=FALSE;
|
BOOL seen_gamma=FALSE, seen_whitepoint=FALSE, seen_chrm=FALSE;
|
||||||
|
|
||||||
hr = IWICBitmapDecoder_GetFrame(decoder, active_frame, &frame);
|
hr = IWICBitmapDecoder_GetFrame(decoder, active_frame, &frame);
|
||||||
if (hr != S_OK) return;
|
if (hr != S_OK) return;
|
||||||
|
@ -3552,6 +3552,57 @@ static void png_metadata_reader(GpBitmap *bitmap, IWICBitmapDecoder *decoder, UI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (SUCCEEDED(hr) && IsEqualGUID(&GUID_MetadataFormatChunkcHRM, &format))
|
||||||
|
{
|
||||||
|
PropertyItem* item;
|
||||||
|
|
||||||
|
if (!seen_whitepoint)
|
||||||
|
{
|
||||||
|
item = GdipAlloc(sizeof(PropertyItem) + sizeof(ULONG) * 4);
|
||||||
|
if (item)
|
||||||
|
{
|
||||||
|
ULONG *rational;
|
||||||
|
item->length = sizeof(ULONG) * 4;
|
||||||
|
item->type = PropertyTagTypeRational;
|
||||||
|
item->id = PropertyTagWhitePoint;
|
||||||
|
rational = item->value = item + 1;
|
||||||
|
rational[0] = get_ulong_by_index(reader, 0);
|
||||||
|
rational[1] = 100000;
|
||||||
|
rational[2] = get_ulong_by_index(reader, 1);
|
||||||
|
rational[3] = 100000;
|
||||||
|
add_property(bitmap, item);
|
||||||
|
seen_whitepoint = TRUE;
|
||||||
|
GdipFree(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!seen_chrm)
|
||||||
|
{
|
||||||
|
item = GdipAlloc(sizeof(PropertyItem) + sizeof(ULONG) * 12);
|
||||||
|
if (item)
|
||||||
|
{
|
||||||
|
ULONG *rational;
|
||||||
|
item->length = sizeof(ULONG) * 12;
|
||||||
|
item->type = PropertyTagTypeRational;
|
||||||
|
item->id = PropertyTagPrimaryChromaticities;
|
||||||
|
rational = item->value = item + 1;
|
||||||
|
rational[0] = get_ulong_by_index(reader, 2);
|
||||||
|
rational[1] = 100000;
|
||||||
|
rational[2] = get_ulong_by_index(reader, 3);
|
||||||
|
rational[3] = 100000;
|
||||||
|
rational[4] = get_ulong_by_index(reader, 4);
|
||||||
|
rational[5] = 100000;
|
||||||
|
rational[6] = get_ulong_by_index(reader, 5);
|
||||||
|
rational[7] = 100000;
|
||||||
|
rational[8] = get_ulong_by_index(reader, 6);
|
||||||
|
rational[9] = 100000;
|
||||||
|
rational[10] = get_ulong_by_index(reader, 7);
|
||||||
|
rational[11] = 100000;
|
||||||
|
add_property(bitmap, item);
|
||||||
|
seen_chrm = TRUE;
|
||||||
|
GdipFree(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IWICMetadataReader_Release(reader);
|
IWICMetadataReader_Release(reader);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue