System.Drawing.Imaging:PropertyItem.Type = 9对应哪种类型?

时间:2016-07-22 19:38:57

标签: c# image system.drawing.imaging

我正在使用System.Drawing.Image加载JPG图片。

我发现的图像的EXIF方向标记(0x0112)类型= 9,len = 4

通常当我加载图像时,我得到Type = 3(uint16的数组,len = 2(字节))。一个线索是当我通过EXIFTool(http://www.sno.phy.queensu.ca/~phil/exiftool/)运行它时,我注意到Exif Byte Order是Little-endian(Intel,II)。所以,我有点认为System.Drawing.Image中的EXIF处理不支持这个字节顺序,或者我需要以某种方式转换来自Little Endian的字节 - > Big Endian?尽管如此,字节数并不正确。我正确解析的其他一些图像是Big Endian(虽然还没有检查过它们)。

在PropertyItem.Type的文档中,没有列出9: https://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem.type(v=vs.110).aspx

相关代码段:

    public static Image RemoveImageOrientation(this Image imageIn)
    {
        if(imageIn.HasOrientationExifTag())
        {
            var orientationPropItem = imageIn.GetPropertyItem((int)ImagePropertyItemMetaData.PropertyTagOrientation);

            if(orientationPropItem.Type != 3 // array of uint16
                || orientationPropItem.Len != 2) // only one 1 uint (2 bytes)
            {
                throw new ArgumentException("Unable to parse orientation EXIF tag.  Type = " + orientationPropItem.Type + ", len = " + orientationPropItem.Len);
            }

            var orientationExifTag = BitConverter.ToUInt16(orientationPropItem.Value, 0);

0 个答案:

没有答案