Browse Source

Expand test and cleanup

pull/1935/head
James Jackson-South 4 years ago
parent
commit
0fdcf04b30
  1. 7
      src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs
  2. 804
      src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs
  3. 17
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs

7
src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs

@ -220,11 +220,6 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
if (this.TryReadSpan(buffer)) if (this.TryReadSpan(buffer))
{ {
object value = this.ConvertValue(tag.Exif, tag.DataType, buffer, tag.NumberOfComponents > 1 || tag.Exif.IsArray); object value = this.ConvertValue(tag.Exif, tag.DataType, buffer, tag.NumberOfComponents > 1 || tag.Exif.IsArray);
if (value is EncodedString)
{
// Console.WriteLine("EncodedString tag: " + (ushort)tag.Exif.Tag);
}
this.Add(values, tag.Exif, value); this.Add(values, tag.Exif, value);
} }
} }
@ -469,7 +464,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
// Likewise, tags that point to other IFDs, like e.g. the SubIFDs tag, are now allowed to have the datatype TIFF_IFD8 in BigTIFF. // Likewise, tags that point to other IFDs, like e.g. the SubIFDs tag, are now allowed to have the datatype TIFF_IFD8 in BigTIFF.
// Again, the old datatypes TIFF_IFD, and the hardly recommendable TIFF_LONG, are still valid, too. // Again, the old datatypes TIFF_IFD, and the hardly recommendable TIFF_LONG, are still valid, too.
// https://www.awaresystems.be/imaging/tiff/bigtiff.html // https://www.awaresystems.be/imaging/tiff/bigtiff.html
ExifValue exifValue = null; ExifValue exifValue;
switch (tag) switch (tag)
{ {
case ExifTagValue.StripOffsets: case ExifTagValue.StripOffsets:

804
src/ImageSharp/Metadata/Profiles/Exif/Values/ExifValues.cs

@ -15,21 +15,36 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
{ {
switch (dataType) switch (dataType)
{ {
case ExifDataType.Byte: return isArray ? (ExifValue)new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType); case ExifDataType.Byte:
case ExifDataType.DoubleFloat: return isArray ? (ExifValue)new ExifDoubleArray(tag) : new ExifDouble(tag); return isArray ? new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType);
case ExifDataType.SingleFloat: return isArray ? (ExifValue)new ExifFloatArray(tag) : new ExifFloat(tag); case ExifDataType.DoubleFloat:
case ExifDataType.Long: return isArray ? (ExifValue)new ExifLongArray(tag) : new ExifLong(tag); return isArray ? new ExifDoubleArray(tag) : new ExifDouble(tag);
case ExifDataType.Long8: return isArray ? (ExifValue)new ExifLong8Array(tag) : new ExifLong8(tag); case ExifDataType.SingleFloat:
case ExifDataType.Rational: return isArray ? (ExifValue)new ExifRationalArray(tag) : new ExifRational(tag); return isArray ? new ExifFloatArray(tag) : new ExifFloat(tag);
case ExifDataType.Short: return isArray ? (ExifValue)new ExifShortArray(tag) : new ExifShort(tag); case ExifDataType.Long:
case ExifDataType.SignedByte: return isArray ? (ExifValue)new ExifSignedByteArray(tag) : new ExifSignedByte(tag); return isArray ? new ExifLongArray(tag) : new ExifLong(tag);
case ExifDataType.SignedLong: return isArray ? (ExifValue)new ExifSignedLongArray(tag) : new ExifSignedLong(tag); case ExifDataType.Long8:
case ExifDataType.SignedLong8: return isArray ? (ExifValue)new ExifSignedLong8Array(tag) : new ExifSignedLong8(tag); return isArray ? new ExifLong8Array(tag) : new ExifLong8(tag);
case ExifDataType.SignedRational: return isArray ? (ExifValue)new ExifSignedRationalArray(tag) : new ExifSignedRational(tag); case ExifDataType.Rational:
case ExifDataType.SignedShort: return isArray ? (ExifValue)new ExifSignedShortArray(tag) : new ExifSignedShort(tag); return isArray ? new ExifRationalArray(tag) : new ExifRational(tag);
case ExifDataType.Ascii: return new ExifString(tag); case ExifDataType.Short:
case ExifDataType.Undefined: return isArray ? (ExifValue)new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType); return isArray ? new ExifShortArray(tag) : new ExifShort(tag);
default: return null; case ExifDataType.SignedByte:
return isArray ? new ExifSignedByteArray(tag) : new ExifSignedByte(tag);
case ExifDataType.SignedLong:
return isArray ? new ExifSignedLongArray(tag) : new ExifSignedLong(tag);
case ExifDataType.SignedLong8:
return isArray ? new ExifSignedLong8Array(tag) : new ExifSignedLong8(tag);
case ExifDataType.SignedRational:
return isArray ? new ExifSignedRationalArray(tag) : new ExifSignedRational(tag);
case ExifDataType.SignedShort:
return isArray ? new ExifSignedShortArray(tag) : new ExifSignedShort(tag);
case ExifDataType.Ascii:
return new ExifString(tag);
case ExifDataType.Undefined:
return isArray ? new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType);
default:
return null;
} }
} }
@ -37,276 +52,529 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
{ {
switch (tag) switch (tag)
{ {
case ExifTagValue.FaxProfile: return new ExifByte(ExifTag.FaxProfile, ExifDataType.Byte); case ExifTagValue.FaxProfile:
case ExifTagValue.ModeNumber: return new ExifByte(ExifTag.ModeNumber, ExifDataType.Byte); return new ExifByte(ExifTag.FaxProfile, ExifDataType.Byte);
case ExifTagValue.GPSAltitudeRef: return new ExifByte(ExifTag.GPSAltitudeRef, ExifDataType.Byte); case ExifTagValue.ModeNumber:
return new ExifByte(ExifTag.ModeNumber, ExifDataType.Byte);
case ExifTagValue.GPSAltitudeRef:
return new ExifByte(ExifTag.GPSAltitudeRef, ExifDataType.Byte);
case ExifTagValue.ClipPath: return new ExifByteArray(ExifTag.ClipPath, ExifDataType.Byte); case ExifTagValue.ClipPath:
case ExifTagValue.VersionYear: return new ExifByteArray(ExifTag.VersionYear, ExifDataType.Byte); return new ExifByteArray(ExifTag.ClipPath, ExifDataType.Byte);
case ExifTagValue.XMP: return new ExifByteArray(ExifTag.XMP, ExifDataType.Byte); case ExifTagValue.VersionYear:
case ExifTagValue.CFAPattern2: return new ExifByteArray(ExifTag.CFAPattern2, ExifDataType.Byte); return new ExifByteArray(ExifTag.VersionYear, ExifDataType.Byte);
case ExifTagValue.TIFFEPStandardID: return new ExifByteArray(ExifTag.TIFFEPStandardID, ExifDataType.Byte); case ExifTagValue.XMP:
case ExifTagValue.GPSVersionID: return new ExifByteArray(ExifTag.GPSVersionID, ExifDataType.Byte); return new ExifByteArray(ExifTag.XMP, ExifDataType.Byte);
case ExifTagValue.CFAPattern2:
return new ExifByteArray(ExifTag.CFAPattern2, ExifDataType.Byte);
case ExifTagValue.TIFFEPStandardID:
return new ExifByteArray(ExifTag.TIFFEPStandardID, ExifDataType.Byte);
case ExifTagValue.GPSVersionID:
return new ExifByteArray(ExifTag.GPSVersionID, ExifDataType.Byte);
case ExifTagValue.PixelScale: return new ExifDoubleArray(ExifTag.PixelScale); case ExifTagValue.PixelScale:
case ExifTagValue.IntergraphMatrix: return new ExifDoubleArray(ExifTag.IntergraphMatrix); return new ExifDoubleArray(ExifTag.PixelScale);
case ExifTagValue.ModelTiePoint: return new ExifDoubleArray(ExifTag.ModelTiePoint); case ExifTagValue.IntergraphMatrix:
case ExifTagValue.ModelTransform: return new ExifDoubleArray(ExifTag.ModelTransform); return new ExifDoubleArray(ExifTag.IntergraphMatrix);
case ExifTagValue.ModelTiePoint:
return new ExifDoubleArray(ExifTag.ModelTiePoint);
case ExifTagValue.ModelTransform:
return new ExifDoubleArray(ExifTag.ModelTransform);
case ExifTagValue.SubfileType: return new ExifLong(ExifTag.SubfileType); case ExifTagValue.SubfileType:
case ExifTagValue.SubIFDOffset: return new ExifLong(ExifTag.SubIFDOffset); return new ExifLong(ExifTag.SubfileType);
case ExifTagValue.GPSIFDOffset: return new ExifLong(ExifTag.GPSIFDOffset); case ExifTagValue.SubIFDOffset:
case ExifTagValue.T4Options: return new ExifLong(ExifTag.T4Options); return new ExifLong(ExifTag.SubIFDOffset);
case ExifTagValue.T6Options: return new ExifLong(ExifTag.T6Options); case ExifTagValue.GPSIFDOffset:
case ExifTagValue.XClipPathUnits: return new ExifLong(ExifTag.XClipPathUnits); return new ExifLong(ExifTag.GPSIFDOffset);
case ExifTagValue.YClipPathUnits: return new ExifLong(ExifTag.YClipPathUnits); case ExifTagValue.T4Options:
case ExifTagValue.ProfileType: return new ExifLong(ExifTag.ProfileType); return new ExifLong(ExifTag.T4Options);
case ExifTagValue.CodingMethods: return new ExifLong(ExifTag.CodingMethods); case ExifTagValue.T6Options:
case ExifTagValue.T82ptions: return new ExifLong(ExifTag.T82ptions); return new ExifLong(ExifTag.T6Options);
case ExifTagValue.JPEGInterchangeFormat: return new ExifLong(ExifTag.JPEGInterchangeFormat); case ExifTagValue.XClipPathUnits:
case ExifTagValue.JPEGInterchangeFormatLength: return new ExifLong(ExifTag.JPEGInterchangeFormatLength); return new ExifLong(ExifTag.XClipPathUnits);
case ExifTagValue.MDFileTag: return new ExifLong(ExifTag.MDFileTag); case ExifTagValue.YClipPathUnits:
case ExifTagValue.StandardOutputSensitivity: return new ExifLong(ExifTag.StandardOutputSensitivity); return new ExifLong(ExifTag.YClipPathUnits);
case ExifTagValue.RecommendedExposureIndex: return new ExifLong(ExifTag.RecommendedExposureIndex); case ExifTagValue.ProfileType:
case ExifTagValue.ISOSpeed: return new ExifLong(ExifTag.ISOSpeed); return new ExifLong(ExifTag.ProfileType);
case ExifTagValue.ISOSpeedLatitudeyyy: return new ExifLong(ExifTag.ISOSpeedLatitudeyyy); case ExifTagValue.CodingMethods:
case ExifTagValue.ISOSpeedLatitudezzz: return new ExifLong(ExifTag.ISOSpeedLatitudezzz); return new ExifLong(ExifTag.CodingMethods);
case ExifTagValue.FaxRecvParams: return new ExifLong(ExifTag.FaxRecvParams); case ExifTagValue.T82ptions:
case ExifTagValue.FaxRecvTime: return new ExifLong(ExifTag.FaxRecvTime); return new ExifLong(ExifTag.T82ptions);
case ExifTagValue.ImageNumber: return new ExifLong(ExifTag.ImageNumber); case ExifTagValue.JPEGInterchangeFormat:
return new ExifLong(ExifTag.JPEGInterchangeFormat);
case ExifTagValue.JPEGInterchangeFormatLength:
return new ExifLong(ExifTag.JPEGInterchangeFormatLength);
case ExifTagValue.MDFileTag:
return new ExifLong(ExifTag.MDFileTag);
case ExifTagValue.StandardOutputSensitivity:
return new ExifLong(ExifTag.StandardOutputSensitivity);
case ExifTagValue.RecommendedExposureIndex:
return new ExifLong(ExifTag.RecommendedExposureIndex);
case ExifTagValue.ISOSpeed:
return new ExifLong(ExifTag.ISOSpeed);
case ExifTagValue.ISOSpeedLatitudeyyy:
return new ExifLong(ExifTag.ISOSpeedLatitudeyyy);
case ExifTagValue.ISOSpeedLatitudezzz:
return new ExifLong(ExifTag.ISOSpeedLatitudezzz);
case ExifTagValue.FaxRecvParams:
return new ExifLong(ExifTag.FaxRecvParams);
case ExifTagValue.FaxRecvTime:
return new ExifLong(ExifTag.FaxRecvTime);
case ExifTagValue.ImageNumber:
return new ExifLong(ExifTag.ImageNumber);
case ExifTagValue.FreeOffsets: return new ExifLongArray(ExifTag.FreeOffsets); case ExifTagValue.FreeOffsets:
case ExifTagValue.FreeByteCounts: return new ExifLongArray(ExifTag.FreeByteCounts); return new ExifLongArray(ExifTag.FreeOffsets);
case ExifTagValue.ColorResponseUnit: return new ExifLongArray(ExifTag.ColorResponseUnit); case ExifTagValue.FreeByteCounts:
case ExifTagValue.TileOffsets: return new ExifLongArray(ExifTag.TileOffsets); return new ExifLongArray(ExifTag.FreeByteCounts);
case ExifTagValue.SMinSampleValue: return new ExifLongArray(ExifTag.SMinSampleValue); case ExifTagValue.ColorResponseUnit:
case ExifTagValue.SMaxSampleValue: return new ExifLongArray(ExifTag.SMaxSampleValue); return new ExifLongArray(ExifTag.ColorResponseUnit);
case ExifTagValue.JPEGQTables: return new ExifLongArray(ExifTag.JPEGQTables); case ExifTagValue.TileOffsets:
case ExifTagValue.JPEGDCTables: return new ExifLongArray(ExifTag.JPEGDCTables); return new ExifLongArray(ExifTag.TileOffsets);
case ExifTagValue.JPEGACTables: return new ExifLongArray(ExifTag.JPEGACTables); case ExifTagValue.SMinSampleValue:
case ExifTagValue.StripRowCounts: return new ExifLongArray(ExifTag.StripRowCounts); return new ExifLongArray(ExifTag.SMinSampleValue);
case ExifTagValue.IntergraphRegisters: return new ExifLongArray(ExifTag.IntergraphRegisters); case ExifTagValue.SMaxSampleValue:
case ExifTagValue.TimeZoneOffset: return new ExifLongArray(ExifTag.TimeZoneOffset); return new ExifLongArray(ExifTag.SMaxSampleValue);
case ExifTagValue.SubIFDs: return new ExifLongArray(ExifTag.SubIFDs); case ExifTagValue.JPEGQTables:
return new ExifLongArray(ExifTag.JPEGQTables);
case ExifTagValue.JPEGDCTables:
return new ExifLongArray(ExifTag.JPEGDCTables);
case ExifTagValue.JPEGACTables:
return new ExifLongArray(ExifTag.JPEGACTables);
case ExifTagValue.StripRowCounts:
return new ExifLongArray(ExifTag.StripRowCounts);
case ExifTagValue.IntergraphRegisters:
return new ExifLongArray(ExifTag.IntergraphRegisters);
case ExifTagValue.TimeZoneOffset:
return new ExifLongArray(ExifTag.TimeZoneOffset);
case ExifTagValue.SubIFDs:
return new ExifLongArray(ExifTag.SubIFDs);
case ExifTagValue.ImageWidth: return new ExifNumber(ExifTag.ImageWidth); case ExifTagValue.ImageWidth:
case ExifTagValue.ImageLength: return new ExifNumber(ExifTag.ImageLength); return new ExifNumber(ExifTag.ImageWidth);
case ExifTagValue.RowsPerStrip: return new ExifNumber(ExifTag.RowsPerStrip); case ExifTagValue.ImageLength:
case ExifTagValue.TileWidth: return new ExifNumber(ExifTag.TileWidth); return new ExifNumber(ExifTag.ImageLength);
case ExifTagValue.TileLength: return new ExifNumber(ExifTag.TileLength); case ExifTagValue.RowsPerStrip:
case ExifTagValue.BadFaxLines: return new ExifNumber(ExifTag.BadFaxLines); return new ExifNumber(ExifTag.RowsPerStrip);
case ExifTagValue.ConsecutiveBadFaxLines: return new ExifNumber(ExifTag.ConsecutiveBadFaxLines); case ExifTagValue.TileWidth:
case ExifTagValue.PixelXDimension: return new ExifNumber(ExifTag.PixelXDimension); return new ExifNumber(ExifTag.TileWidth);
case ExifTagValue.PixelYDimension: return new ExifNumber(ExifTag.PixelYDimension); case ExifTagValue.TileLength:
return new ExifNumber(ExifTag.TileLength);
case ExifTagValue.BadFaxLines:
return new ExifNumber(ExifTag.BadFaxLines);
case ExifTagValue.ConsecutiveBadFaxLines:
return new ExifNumber(ExifTag.ConsecutiveBadFaxLines);
case ExifTagValue.PixelXDimension:
return new ExifNumber(ExifTag.PixelXDimension);
case ExifTagValue.PixelYDimension:
return new ExifNumber(ExifTag.PixelYDimension);
case ExifTagValue.StripByteCounts: return new ExifNumberArray(ExifTag.StripByteCounts); case ExifTagValue.StripByteCounts:
case ExifTagValue.StripOffsets: return new ExifNumberArray(ExifTag.StripOffsets); return new ExifNumberArray(ExifTag.StripByteCounts);
case ExifTagValue.TileByteCounts: return new ExifNumberArray(ExifTag.TileByteCounts); case ExifTagValue.StripOffsets:
case ExifTagValue.ImageLayer: return new ExifNumberArray(ExifTag.ImageLayer); return new ExifNumberArray(ExifTag.StripOffsets);
case ExifTagValue.TileByteCounts:
return new ExifNumberArray(ExifTag.TileByteCounts);
case ExifTagValue.ImageLayer:
return new ExifNumberArray(ExifTag.ImageLayer);
case ExifTagValue.XPosition: return new ExifRational(ExifTag.XPosition); case ExifTagValue.XPosition:
case ExifTagValue.YPosition: return new ExifRational(ExifTag.YPosition); return new ExifRational(ExifTag.XPosition);
case ExifTagValue.XResolution: return new ExifRational(ExifTag.XResolution); case ExifTagValue.YPosition:
case ExifTagValue.YResolution: return new ExifRational(ExifTag.YResolution); return new ExifRational(ExifTag.YPosition);
case ExifTagValue.BatteryLevel: return new ExifRational(ExifTag.BatteryLevel); case ExifTagValue.XResolution:
case ExifTagValue.ExposureTime: return new ExifRational(ExifTag.ExposureTime); return new ExifRational(ExifTag.XResolution);
case ExifTagValue.FNumber: return new ExifRational(ExifTag.FNumber); case ExifTagValue.YResolution:
case ExifTagValue.MDScalePixel: return new ExifRational(ExifTag.MDScalePixel); return new ExifRational(ExifTag.YResolution);
case ExifTagValue.CompressedBitsPerPixel: return new ExifRational(ExifTag.CompressedBitsPerPixel); case ExifTagValue.BatteryLevel:
case ExifTagValue.ApertureValue: return new ExifRational(ExifTag.ApertureValue); return new ExifRational(ExifTag.BatteryLevel);
case ExifTagValue.MaxApertureValue: return new ExifRational(ExifTag.MaxApertureValue); case ExifTagValue.ExposureTime:
case ExifTagValue.SubjectDistance: return new ExifRational(ExifTag.SubjectDistance); return new ExifRational(ExifTag.ExposureTime);
case ExifTagValue.FocalLength: return new ExifRational(ExifTag.FocalLength); case ExifTagValue.FNumber:
case ExifTagValue.FlashEnergy2: return new ExifRational(ExifTag.FlashEnergy2); return new ExifRational(ExifTag.FNumber);
case ExifTagValue.FocalPlaneXResolution2: return new ExifRational(ExifTag.FocalPlaneXResolution2); case ExifTagValue.MDScalePixel:
case ExifTagValue.FocalPlaneYResolution2: return new ExifRational(ExifTag.FocalPlaneYResolution2); return new ExifRational(ExifTag.MDScalePixel);
case ExifTagValue.ExposureIndex2: return new ExifRational(ExifTag.ExposureIndex2); case ExifTagValue.CompressedBitsPerPixel:
case ExifTagValue.Humidity: return new ExifRational(ExifTag.Humidity); return new ExifRational(ExifTag.CompressedBitsPerPixel);
case ExifTagValue.Pressure: return new ExifRational(ExifTag.Pressure); case ExifTagValue.ApertureValue:
case ExifTagValue.Acceleration: return new ExifRational(ExifTag.Acceleration); return new ExifRational(ExifTag.ApertureValue);
case ExifTagValue.FlashEnergy: return new ExifRational(ExifTag.FlashEnergy); case ExifTagValue.MaxApertureValue:
case ExifTagValue.FocalPlaneXResolution: return new ExifRational(ExifTag.FocalPlaneXResolution); return new ExifRational(ExifTag.MaxApertureValue);
case ExifTagValue.FocalPlaneYResolution: return new ExifRational(ExifTag.FocalPlaneYResolution); case ExifTagValue.SubjectDistance:
case ExifTagValue.ExposureIndex: return new ExifRational(ExifTag.ExposureIndex); return new ExifRational(ExifTag.SubjectDistance);
case ExifTagValue.DigitalZoomRatio: return new ExifRational(ExifTag.DigitalZoomRatio); case ExifTagValue.FocalLength:
case ExifTagValue.GPSAltitude: return new ExifRational(ExifTag.GPSAltitude); return new ExifRational(ExifTag.FocalLength);
case ExifTagValue.GPSDOP: return new ExifRational(ExifTag.GPSDOP); case ExifTagValue.FlashEnergy2:
case ExifTagValue.GPSSpeed: return new ExifRational(ExifTag.GPSSpeed); return new ExifRational(ExifTag.FlashEnergy2);
case ExifTagValue.GPSTrack: return new ExifRational(ExifTag.GPSTrack); case ExifTagValue.FocalPlaneXResolution2:
case ExifTagValue.GPSImgDirection: return new ExifRational(ExifTag.GPSImgDirection); return new ExifRational(ExifTag.FocalPlaneXResolution2);
case ExifTagValue.GPSDestBearing: return new ExifRational(ExifTag.GPSDestBearing); case ExifTagValue.FocalPlaneYResolution2:
case ExifTagValue.GPSDestDistance: return new ExifRational(ExifTag.GPSDestDistance); return new ExifRational(ExifTag.FocalPlaneYResolution2);
case ExifTagValue.ExposureIndex2:
return new ExifRational(ExifTag.ExposureIndex2);
case ExifTagValue.Humidity:
return new ExifRational(ExifTag.Humidity);
case ExifTagValue.Pressure:
return new ExifRational(ExifTag.Pressure);
case ExifTagValue.Acceleration:
return new ExifRational(ExifTag.Acceleration);
case ExifTagValue.FlashEnergy:
return new ExifRational(ExifTag.FlashEnergy);
case ExifTagValue.FocalPlaneXResolution:
return new ExifRational(ExifTag.FocalPlaneXResolution);
case ExifTagValue.FocalPlaneYResolution:
return new ExifRational(ExifTag.FocalPlaneYResolution);
case ExifTagValue.ExposureIndex:
return new ExifRational(ExifTag.ExposureIndex);
case ExifTagValue.DigitalZoomRatio:
return new ExifRational(ExifTag.DigitalZoomRatio);
case ExifTagValue.GPSAltitude:
return new ExifRational(ExifTag.GPSAltitude);
case ExifTagValue.GPSDOP:
return new ExifRational(ExifTag.GPSDOP);
case ExifTagValue.GPSSpeed:
return new ExifRational(ExifTag.GPSSpeed);
case ExifTagValue.GPSTrack:
return new ExifRational(ExifTag.GPSTrack);
case ExifTagValue.GPSImgDirection:
return new ExifRational(ExifTag.GPSImgDirection);
case ExifTagValue.GPSDestBearing:
return new ExifRational(ExifTag.GPSDestBearing);
case ExifTagValue.GPSDestDistance:
return new ExifRational(ExifTag.GPSDestDistance);
case ExifTagValue.WhitePoint: return new ExifRationalArray(ExifTag.WhitePoint); case ExifTagValue.WhitePoint:
case ExifTagValue.PrimaryChromaticities: return new ExifRationalArray(ExifTag.PrimaryChromaticities); return new ExifRationalArray(ExifTag.WhitePoint);
case ExifTagValue.YCbCrCoefficients: return new ExifRationalArray(ExifTag.YCbCrCoefficients); case ExifTagValue.PrimaryChromaticities:
case ExifTagValue.ReferenceBlackWhite: return new ExifRationalArray(ExifTag.ReferenceBlackWhite); return new ExifRationalArray(ExifTag.PrimaryChromaticities);
case ExifTagValue.GPSLatitude: return new ExifRationalArray(ExifTag.GPSLatitude); case ExifTagValue.YCbCrCoefficients:
case ExifTagValue.GPSLongitude: return new ExifRationalArray(ExifTag.GPSLongitude); return new ExifRationalArray(ExifTag.YCbCrCoefficients);
case ExifTagValue.GPSTimestamp: return new ExifRationalArray(ExifTag.GPSTimestamp); case ExifTagValue.ReferenceBlackWhite:
case ExifTagValue.GPSDestLatitude: return new ExifRationalArray(ExifTag.GPSDestLatitude); return new ExifRationalArray(ExifTag.ReferenceBlackWhite);
case ExifTagValue.GPSDestLongitude: return new ExifRationalArray(ExifTag.GPSDestLongitude); case ExifTagValue.GPSLatitude:
case ExifTagValue.LensSpecification: return new ExifRationalArray(ExifTag.LensSpecification); return new ExifRationalArray(ExifTag.GPSLatitude);
case ExifTagValue.GPSLongitude:
return new ExifRationalArray(ExifTag.GPSLongitude);
case ExifTagValue.GPSTimestamp:
return new ExifRationalArray(ExifTag.GPSTimestamp);
case ExifTagValue.GPSDestLatitude:
return new ExifRationalArray(ExifTag.GPSDestLatitude);
case ExifTagValue.GPSDestLongitude:
return new ExifRationalArray(ExifTag.GPSDestLongitude);
case ExifTagValue.LensSpecification:
return new ExifRationalArray(ExifTag.LensSpecification);
case ExifTagValue.OldSubfileType: return new ExifShort(ExifTag.OldSubfileType); case ExifTagValue.OldSubfileType:
case ExifTagValue.Compression: return new ExifShort(ExifTag.Compression); return new ExifShort(ExifTag.OldSubfileType);
case ExifTagValue.PhotometricInterpretation: return new ExifShort(ExifTag.PhotometricInterpretation); case ExifTagValue.Compression:
case ExifTagValue.Thresholding: return new ExifShort(ExifTag.Thresholding); return new ExifShort(ExifTag.Compression);
case ExifTagValue.CellWidth: return new ExifShort(ExifTag.CellWidth); case ExifTagValue.PhotometricInterpretation:
case ExifTagValue.CellLength: return new ExifShort(ExifTag.CellLength); return new ExifShort(ExifTag.PhotometricInterpretation);
case ExifTagValue.FillOrder: return new ExifShort(ExifTag.FillOrder); case ExifTagValue.Thresholding:
case ExifTagValue.Orientation: return new ExifShort(ExifTag.Orientation); return new ExifShort(ExifTag.Thresholding);
case ExifTagValue.SamplesPerPixel: return new ExifShort(ExifTag.SamplesPerPixel); case ExifTagValue.CellWidth:
case ExifTagValue.PlanarConfiguration: return new ExifShort(ExifTag.PlanarConfiguration); return new ExifShort(ExifTag.CellWidth);
case ExifTagValue.Predictor: return new ExifShort(ExifTag.Predictor); case ExifTagValue.CellLength:
case ExifTagValue.GrayResponseUnit: return new ExifShort(ExifTag.GrayResponseUnit); return new ExifShort(ExifTag.CellLength);
case ExifTagValue.ResolutionUnit: return new ExifShort(ExifTag.ResolutionUnit); case ExifTagValue.FillOrder:
case ExifTagValue.CleanFaxData: return new ExifShort(ExifTag.CleanFaxData); return new ExifShort(ExifTag.FillOrder);
case ExifTagValue.InkSet: return new ExifShort(ExifTag.InkSet); case ExifTagValue.Orientation:
case ExifTagValue.NumberOfInks: return new ExifShort(ExifTag.NumberOfInks); return new ExifShort(ExifTag.Orientation);
case ExifTagValue.DotRange: return new ExifShort(ExifTag.DotRange); case ExifTagValue.SamplesPerPixel:
case ExifTagValue.Indexed: return new ExifShort(ExifTag.Indexed); return new ExifShort(ExifTag.SamplesPerPixel);
case ExifTagValue.OPIProxy: return new ExifShort(ExifTag.OPIProxy); case ExifTagValue.PlanarConfiguration:
case ExifTagValue.JPEGProc: return new ExifShort(ExifTag.JPEGProc); return new ExifShort(ExifTag.PlanarConfiguration);
case ExifTagValue.JPEGRestartInterval: return new ExifShort(ExifTag.JPEGRestartInterval); case ExifTagValue.Predictor:
case ExifTagValue.YCbCrPositioning: return new ExifShort(ExifTag.YCbCrPositioning); return new ExifShort(ExifTag.Predictor);
case ExifTagValue.Rating: return new ExifShort(ExifTag.Rating); case ExifTagValue.GrayResponseUnit:
case ExifTagValue.RatingPercent: return new ExifShort(ExifTag.RatingPercent); return new ExifShort(ExifTag.GrayResponseUnit);
case ExifTagValue.ExposureProgram: return new ExifShort(ExifTag.ExposureProgram); case ExifTagValue.ResolutionUnit:
case ExifTagValue.Interlace: return new ExifShort(ExifTag.Interlace); return new ExifShort(ExifTag.ResolutionUnit);
case ExifTagValue.SelfTimerMode: return new ExifShort(ExifTag.SelfTimerMode); case ExifTagValue.CleanFaxData:
case ExifTagValue.SensitivityType: return new ExifShort(ExifTag.SensitivityType); return new ExifShort(ExifTag.CleanFaxData);
case ExifTagValue.MeteringMode: return new ExifShort(ExifTag.MeteringMode); case ExifTagValue.InkSet:
case ExifTagValue.LightSource: return new ExifShort(ExifTag.LightSource); return new ExifShort(ExifTag.InkSet);
case ExifTagValue.FocalPlaneResolutionUnit2: return new ExifShort(ExifTag.FocalPlaneResolutionUnit2); case ExifTagValue.NumberOfInks:
case ExifTagValue.SensingMethod2: return new ExifShort(ExifTag.SensingMethod2); return new ExifShort(ExifTag.NumberOfInks);
case ExifTagValue.Flash: return new ExifShort(ExifTag.Flash); case ExifTagValue.DotRange:
case ExifTagValue.ColorSpace: return new ExifShort(ExifTag.ColorSpace); return new ExifShort(ExifTag.DotRange);
case ExifTagValue.FocalPlaneResolutionUnit: return new ExifShort(ExifTag.FocalPlaneResolutionUnit); case ExifTagValue.Indexed:
case ExifTagValue.SensingMethod: return new ExifShort(ExifTag.SensingMethod); return new ExifShort(ExifTag.Indexed);
case ExifTagValue.CustomRendered: return new ExifShort(ExifTag.CustomRendered); case ExifTagValue.OPIProxy:
case ExifTagValue.ExposureMode: return new ExifShort(ExifTag.ExposureMode); return new ExifShort(ExifTag.OPIProxy);
case ExifTagValue.WhiteBalance: return new ExifShort(ExifTag.WhiteBalance); case ExifTagValue.JPEGProc:
case ExifTagValue.FocalLengthIn35mmFilm: return new ExifShort(ExifTag.FocalLengthIn35mmFilm); return new ExifShort(ExifTag.JPEGProc);
case ExifTagValue.SceneCaptureType: return new ExifShort(ExifTag.SceneCaptureType); case ExifTagValue.JPEGRestartInterval:
case ExifTagValue.GainControl: return new ExifShort(ExifTag.GainControl); return new ExifShort(ExifTag.JPEGRestartInterval);
case ExifTagValue.Contrast: return new ExifShort(ExifTag.Contrast); case ExifTagValue.YCbCrPositioning:
case ExifTagValue.Saturation: return new ExifShort(ExifTag.Saturation); return new ExifShort(ExifTag.YCbCrPositioning);
case ExifTagValue.Sharpness: return new ExifShort(ExifTag.Sharpness); case ExifTagValue.Rating:
case ExifTagValue.SubjectDistanceRange: return new ExifShort(ExifTag.SubjectDistanceRange); return new ExifShort(ExifTag.Rating);
case ExifTagValue.GPSDifferential: return new ExifShort(ExifTag.GPSDifferential); case ExifTagValue.RatingPercent:
return new ExifShort(ExifTag.RatingPercent);
case ExifTagValue.ExposureProgram:
return new ExifShort(ExifTag.ExposureProgram);
case ExifTagValue.Interlace:
return new ExifShort(ExifTag.Interlace);
case ExifTagValue.SelfTimerMode:
return new ExifShort(ExifTag.SelfTimerMode);
case ExifTagValue.SensitivityType:
return new ExifShort(ExifTag.SensitivityType);
case ExifTagValue.MeteringMode:
return new ExifShort(ExifTag.MeteringMode);
case ExifTagValue.LightSource:
return new ExifShort(ExifTag.LightSource);
case ExifTagValue.FocalPlaneResolutionUnit2:
return new ExifShort(ExifTag.FocalPlaneResolutionUnit2);
case ExifTagValue.SensingMethod2:
return new ExifShort(ExifTag.SensingMethod2);
case ExifTagValue.Flash:
return new ExifShort(ExifTag.Flash);
case ExifTagValue.ColorSpace:
return new ExifShort(ExifTag.ColorSpace);
case ExifTagValue.FocalPlaneResolutionUnit:
return new ExifShort(ExifTag.FocalPlaneResolutionUnit);
case ExifTagValue.SensingMethod:
return new ExifShort(ExifTag.SensingMethod);
case ExifTagValue.CustomRendered:
return new ExifShort(ExifTag.CustomRendered);
case ExifTagValue.ExposureMode:
return new ExifShort(ExifTag.ExposureMode);
case ExifTagValue.WhiteBalance:
return new ExifShort(ExifTag.WhiteBalance);
case ExifTagValue.FocalLengthIn35mmFilm:
return new ExifShort(ExifTag.FocalLengthIn35mmFilm);
case ExifTagValue.SceneCaptureType:
return new ExifShort(ExifTag.SceneCaptureType);
case ExifTagValue.GainControl:
return new ExifShort(ExifTag.GainControl);
case ExifTagValue.Contrast:
return new ExifShort(ExifTag.Contrast);
case ExifTagValue.Saturation:
return new ExifShort(ExifTag.Saturation);
case ExifTagValue.Sharpness:
return new ExifShort(ExifTag.Sharpness);
case ExifTagValue.SubjectDistanceRange:
return new ExifShort(ExifTag.SubjectDistanceRange);
case ExifTagValue.GPSDifferential:
return new ExifShort(ExifTag.GPSDifferential);
case ExifTagValue.BitsPerSample: return new ExifShortArray(ExifTag.BitsPerSample); case ExifTagValue.BitsPerSample:
case ExifTagValue.MinSampleValue: return new ExifShortArray(ExifTag.MinSampleValue); return new ExifShortArray(ExifTag.BitsPerSample);
case ExifTagValue.MaxSampleValue: return new ExifShortArray(ExifTag.MaxSampleValue); case ExifTagValue.MinSampleValue:
case ExifTagValue.GrayResponseCurve: return new ExifShortArray(ExifTag.GrayResponseCurve); return new ExifShortArray(ExifTag.MinSampleValue);
case ExifTagValue.ColorMap: return new ExifShortArray(ExifTag.ColorMap); case ExifTagValue.MaxSampleValue:
case ExifTagValue.ExtraSamples: return new ExifShortArray(ExifTag.ExtraSamples); return new ExifShortArray(ExifTag.MaxSampleValue);
case ExifTagValue.PageNumber: return new ExifShortArray(ExifTag.PageNumber); case ExifTagValue.GrayResponseCurve:
case ExifTagValue.TransferFunction: return new ExifShortArray(ExifTag.TransferFunction); return new ExifShortArray(ExifTag.GrayResponseCurve);
case ExifTagValue.HalftoneHints: return new ExifShortArray(ExifTag.HalftoneHints); case ExifTagValue.ColorMap:
case ExifTagValue.SampleFormat: return new ExifShortArray(ExifTag.SampleFormat); return new ExifShortArray(ExifTag.ColorMap);
case ExifTagValue.TransferRange: return new ExifShortArray(ExifTag.TransferRange); case ExifTagValue.ExtraSamples:
case ExifTagValue.DefaultImageColor: return new ExifShortArray(ExifTag.DefaultImageColor); return new ExifShortArray(ExifTag.ExtraSamples);
case ExifTagValue.JPEGLosslessPredictors: return new ExifShortArray(ExifTag.JPEGLosslessPredictors); case ExifTagValue.PageNumber:
case ExifTagValue.JPEGPointTransforms: return new ExifShortArray(ExifTag.JPEGPointTransforms); return new ExifShortArray(ExifTag.PageNumber);
case ExifTagValue.YCbCrSubsampling: return new ExifShortArray(ExifTag.YCbCrSubsampling); case ExifTagValue.TransferFunction:
case ExifTagValue.CFARepeatPatternDim: return new ExifShortArray(ExifTag.CFARepeatPatternDim); return new ExifShortArray(ExifTag.TransferFunction);
case ExifTagValue.IntergraphPacketData: return new ExifShortArray(ExifTag.IntergraphPacketData); case ExifTagValue.HalftoneHints:
case ExifTagValue.ISOSpeedRatings: return new ExifShortArray(ExifTag.ISOSpeedRatings); return new ExifShortArray(ExifTag.HalftoneHints);
case ExifTagValue.SubjectArea: return new ExifShortArray(ExifTag.SubjectArea); case ExifTagValue.SampleFormat:
case ExifTagValue.SubjectLocation: return new ExifShortArray(ExifTag.SubjectLocation); return new ExifShortArray(ExifTag.SampleFormat);
case ExifTagValue.TransferRange:
return new ExifShortArray(ExifTag.TransferRange);
case ExifTagValue.DefaultImageColor:
return new ExifShortArray(ExifTag.DefaultImageColor);
case ExifTagValue.JPEGLosslessPredictors:
return new ExifShortArray(ExifTag.JPEGLosslessPredictors);
case ExifTagValue.JPEGPointTransforms:
return new ExifShortArray(ExifTag.JPEGPointTransforms);
case ExifTagValue.YCbCrSubsampling:
return new ExifShortArray(ExifTag.YCbCrSubsampling);
case ExifTagValue.CFARepeatPatternDim:
return new ExifShortArray(ExifTag.CFARepeatPatternDim);
case ExifTagValue.IntergraphPacketData:
return new ExifShortArray(ExifTag.IntergraphPacketData);
case ExifTagValue.ISOSpeedRatings:
return new ExifShortArray(ExifTag.ISOSpeedRatings);
case ExifTagValue.SubjectArea:
return new ExifShortArray(ExifTag.SubjectArea);
case ExifTagValue.SubjectLocation:
return new ExifShortArray(ExifTag.SubjectLocation);
case ExifTagValue.ShutterSpeedValue: return new ExifSignedRational(ExifTag.ShutterSpeedValue); case ExifTagValue.ShutterSpeedValue:
case ExifTagValue.BrightnessValue: return new ExifSignedRational(ExifTag.BrightnessValue); return new ExifSignedRational(ExifTag.ShutterSpeedValue);
case ExifTagValue.ExposureBiasValue: return new ExifSignedRational(ExifTag.ExposureBiasValue); case ExifTagValue.BrightnessValue:
case ExifTagValue.AmbientTemperature: return new ExifSignedRational(ExifTag.AmbientTemperature); return new ExifSignedRational(ExifTag.BrightnessValue);
case ExifTagValue.WaterDepth: return new ExifSignedRational(ExifTag.WaterDepth); case ExifTagValue.ExposureBiasValue:
case ExifTagValue.CameraElevationAngle: return new ExifSignedRational(ExifTag.CameraElevationAngle); return new ExifSignedRational(ExifTag.ExposureBiasValue);
case ExifTagValue.AmbientTemperature:
return new ExifSignedRational(ExifTag.AmbientTemperature);
case ExifTagValue.WaterDepth:
return new ExifSignedRational(ExifTag.WaterDepth);
case ExifTagValue.CameraElevationAngle:
return new ExifSignedRational(ExifTag.CameraElevationAngle);
case ExifTagValue.Decode: return new ExifSignedRationalArray(ExifTag.Decode); case ExifTagValue.Decode:
return new ExifSignedRationalArray(ExifTag.Decode);
case ExifTagValue.ImageDescription: return new ExifString(ExifTag.ImageDescription); case ExifTagValue.ImageDescription:
case ExifTagValue.Make: return new ExifString(ExifTag.Make); return new ExifString(ExifTag.ImageDescription);
case ExifTagValue.Model: return new ExifString(ExifTag.Model); case ExifTagValue.Make:
case ExifTagValue.Software: return new ExifString(ExifTag.Software); return new ExifString(ExifTag.Make);
case ExifTagValue.DateTime: return new ExifString(ExifTag.DateTime); case ExifTagValue.Model:
case ExifTagValue.Artist: return new ExifString(ExifTag.Artist); return new ExifString(ExifTag.Model);
case ExifTagValue.HostComputer: return new ExifString(ExifTag.HostComputer); case ExifTagValue.Software:
case ExifTagValue.Copyright: return new ExifString(ExifTag.Copyright); return new ExifString(ExifTag.Software);
case ExifTagValue.DocumentName: return new ExifString(ExifTag.DocumentName); case ExifTagValue.DateTime:
case ExifTagValue.PageName: return new ExifString(ExifTag.PageName); return new ExifString(ExifTag.DateTime);
case ExifTagValue.InkNames: return new ExifString(ExifTag.InkNames); case ExifTagValue.Artist:
case ExifTagValue.TargetPrinter: return new ExifString(ExifTag.TargetPrinter); return new ExifString(ExifTag.Artist);
case ExifTagValue.ImageID: return new ExifString(ExifTag.ImageID); case ExifTagValue.HostComputer:
case ExifTagValue.MDLabName: return new ExifString(ExifTag.MDLabName); return new ExifString(ExifTag.HostComputer);
case ExifTagValue.MDSampleInfo: return new ExifString(ExifTag.MDSampleInfo); case ExifTagValue.Copyright:
case ExifTagValue.MDPrepDate: return new ExifString(ExifTag.MDPrepDate); return new ExifString(ExifTag.Copyright);
case ExifTagValue.MDPrepTime: return new ExifString(ExifTag.MDPrepTime); case ExifTagValue.DocumentName:
case ExifTagValue.MDFileUnits: return new ExifString(ExifTag.MDFileUnits); return new ExifString(ExifTag.DocumentName);
case ExifTagValue.SEMInfo: return new ExifString(ExifTag.SEMInfo); case ExifTagValue.PageName:
case ExifTagValue.SpectralSensitivity: return new ExifString(ExifTag.SpectralSensitivity); return new ExifString(ExifTag.PageName);
case ExifTagValue.DateTimeOriginal: return new ExifString(ExifTag.DateTimeOriginal); case ExifTagValue.InkNames:
case ExifTagValue.DateTimeDigitized: return new ExifString(ExifTag.DateTimeDigitized); return new ExifString(ExifTag.InkNames);
case ExifTagValue.SubsecTime: return new ExifString(ExifTag.SubsecTime); case ExifTagValue.TargetPrinter:
case ExifTagValue.SubsecTimeOriginal: return new ExifString(ExifTag.SubsecTimeOriginal); return new ExifString(ExifTag.TargetPrinter);
case ExifTagValue.SubsecTimeDigitized: return new ExifString(ExifTag.SubsecTimeDigitized); case ExifTagValue.ImageID:
case ExifTagValue.RelatedSoundFile: return new ExifString(ExifTag.RelatedSoundFile); return new ExifString(ExifTag.ImageID);
case ExifTagValue.FaxSubaddress: return new ExifString(ExifTag.FaxSubaddress); case ExifTagValue.MDLabName:
case ExifTagValue.OffsetTime: return new ExifString(ExifTag.OffsetTime); return new ExifString(ExifTag.MDLabName);
case ExifTagValue.OffsetTimeOriginal: return new ExifString(ExifTag.OffsetTimeOriginal); case ExifTagValue.MDSampleInfo:
case ExifTagValue.OffsetTimeDigitized: return new ExifString(ExifTag.OffsetTimeDigitized); return new ExifString(ExifTag.MDSampleInfo);
case ExifTagValue.SecurityClassification: return new ExifString(ExifTag.SecurityClassification); case ExifTagValue.MDPrepDate:
case ExifTagValue.ImageHistory: return new ExifString(ExifTag.ImageHistory); return new ExifString(ExifTag.MDPrepDate);
case ExifTagValue.ImageUniqueID: return new ExifString(ExifTag.ImageUniqueID); case ExifTagValue.MDPrepTime:
case ExifTagValue.OwnerName: return new ExifString(ExifTag.OwnerName); return new ExifString(ExifTag.MDPrepTime);
case ExifTagValue.SerialNumber: return new ExifString(ExifTag.SerialNumber); case ExifTagValue.MDFileUnits:
case ExifTagValue.LensMake: return new ExifString(ExifTag.LensMake); return new ExifString(ExifTag.MDFileUnits);
case ExifTagValue.LensModel: return new ExifString(ExifTag.LensModel); case ExifTagValue.SEMInfo:
case ExifTagValue.LensSerialNumber: return new ExifString(ExifTag.LensSerialNumber); return new ExifString(ExifTag.SEMInfo);
case ExifTagValue.GDALMetadata: return new ExifString(ExifTag.GDALMetadata); case ExifTagValue.SpectralSensitivity:
case ExifTagValue.GDALNoData: return new ExifString(ExifTag.GDALNoData); return new ExifString(ExifTag.SpectralSensitivity);
case ExifTagValue.GPSLatitudeRef: return new ExifString(ExifTag.GPSLatitudeRef); case ExifTagValue.DateTimeOriginal:
case ExifTagValue.GPSLongitudeRef: return new ExifString(ExifTag.GPSLongitudeRef); return new ExifString(ExifTag.DateTimeOriginal);
case ExifTagValue.GPSSatellites: return new ExifString(ExifTag.GPSSatellites); case ExifTagValue.DateTimeDigitized:
case ExifTagValue.GPSStatus: return new ExifString(ExifTag.GPSStatus); return new ExifString(ExifTag.DateTimeDigitized);
case ExifTagValue.GPSMeasureMode: return new ExifString(ExifTag.GPSMeasureMode); case ExifTagValue.SubsecTime:
case ExifTagValue.GPSSpeedRef: return new ExifString(ExifTag.GPSSpeedRef); return new ExifString(ExifTag.SubsecTime);
case ExifTagValue.GPSTrackRef: return new ExifString(ExifTag.GPSTrackRef); case ExifTagValue.SubsecTimeOriginal:
case ExifTagValue.GPSImgDirectionRef: return new ExifString(ExifTag.GPSImgDirectionRef); return new ExifString(ExifTag.SubsecTimeOriginal);
case ExifTagValue.GPSMapDatum: return new ExifString(ExifTag.GPSMapDatum); case ExifTagValue.SubsecTimeDigitized:
case ExifTagValue.GPSDestLatitudeRef: return new ExifString(ExifTag.GPSDestLatitudeRef); return new ExifString(ExifTag.SubsecTimeDigitized);
case ExifTagValue.GPSDestLongitudeRef: return new ExifString(ExifTag.GPSDestLongitudeRef); case ExifTagValue.RelatedSoundFile:
case ExifTagValue.GPSDestBearingRef: return new ExifString(ExifTag.GPSDestBearingRef); return new ExifString(ExifTag.RelatedSoundFile);
case ExifTagValue.GPSDestDistanceRef: return new ExifString(ExifTag.GPSDestDistanceRef); case ExifTagValue.FaxSubaddress:
case ExifTagValue.GPSDateStamp: return new ExifString(ExifTag.GPSDateStamp); return new ExifString(ExifTag.FaxSubaddress);
case ExifTagValue.XPTitle: return new ExifString(ExifTag.XPTitle); case ExifTagValue.OffsetTime:
case ExifTagValue.XPComment: return new ExifString(ExifTag.XPComment); return new ExifString(ExifTag.OffsetTime);
case ExifTagValue.XPAuthor: return new ExifString(ExifTag.XPAuthor); case ExifTagValue.OffsetTimeOriginal:
case ExifTagValue.XPKeywords: return new ExifString(ExifTag.XPKeywords); return new ExifString(ExifTag.OffsetTimeOriginal);
case ExifTagValue.XPSubject: return new ExifString(ExifTag.XPSubject); case ExifTagValue.OffsetTimeDigitized:
return new ExifString(ExifTag.OffsetTimeDigitized);
case ExifTagValue.SecurityClassification:
return new ExifString(ExifTag.SecurityClassification);
case ExifTagValue.ImageHistory:
return new ExifString(ExifTag.ImageHistory);
case ExifTagValue.ImageUniqueID:
return new ExifString(ExifTag.ImageUniqueID);
case ExifTagValue.OwnerName:
return new ExifString(ExifTag.OwnerName);
case ExifTagValue.SerialNumber:
return new ExifString(ExifTag.SerialNumber);
case ExifTagValue.LensMake:
return new ExifString(ExifTag.LensMake);
case ExifTagValue.LensModel:
return new ExifString(ExifTag.LensModel);
case ExifTagValue.LensSerialNumber:
return new ExifString(ExifTag.LensSerialNumber);
case ExifTagValue.GDALMetadata:
return new ExifString(ExifTag.GDALMetadata);
case ExifTagValue.GDALNoData:
return new ExifString(ExifTag.GDALNoData);
case ExifTagValue.GPSLatitudeRef:
return new ExifString(ExifTag.GPSLatitudeRef);
case ExifTagValue.GPSLongitudeRef:
return new ExifString(ExifTag.GPSLongitudeRef);
case ExifTagValue.GPSSatellites:
return new ExifString(ExifTag.GPSSatellites);
case ExifTagValue.GPSStatus:
return new ExifString(ExifTag.GPSStatus);
case ExifTagValue.GPSMeasureMode:
return new ExifString(ExifTag.GPSMeasureMode);
case ExifTagValue.GPSSpeedRef:
return new ExifString(ExifTag.GPSSpeedRef);
case ExifTagValue.GPSTrackRef:
return new ExifString(ExifTag.GPSTrackRef);
case ExifTagValue.GPSImgDirectionRef:
return new ExifString(ExifTag.GPSImgDirectionRef);
case ExifTagValue.GPSMapDatum:
return new ExifString(ExifTag.GPSMapDatum);
case ExifTagValue.GPSDestLatitudeRef:
return new ExifString(ExifTag.GPSDestLatitudeRef);
case ExifTagValue.GPSDestLongitudeRef:
return new ExifString(ExifTag.GPSDestLongitudeRef);
case ExifTagValue.GPSDestBearingRef:
return new ExifString(ExifTag.GPSDestBearingRef);
case ExifTagValue.GPSDestDistanceRef:
return new ExifString(ExifTag.GPSDestDistanceRef);
case ExifTagValue.GPSDateStamp:
return new ExifString(ExifTag.GPSDateStamp);
case ExifTagValue.XPTitle:
return new ExifString(ExifTag.XPTitle);
case ExifTagValue.XPComment:
return new ExifString(ExifTag.XPComment);
case ExifTagValue.XPAuthor:
return new ExifString(ExifTag.XPAuthor);
case ExifTagValue.XPKeywords:
return new ExifString(ExifTag.XPKeywords);
case ExifTagValue.XPSubject:
return new ExifString(ExifTag.XPSubject);
case ExifTagValue.FileSource: return new ExifByte(ExifTag.FileSource, ExifDataType.Undefined); case ExifTagValue.FileSource:
case ExifTagValue.SceneType: return new ExifByte(ExifTag.SceneType, ExifDataType.Undefined); return new ExifByte(ExifTag.FileSource, ExifDataType.Undefined);
case ExifTagValue.SceneType:
return new ExifByte(ExifTag.SceneType, ExifDataType.Undefined);
case ExifTagValue.JPEGTables: return new ExifByteArray(ExifTag.JPEGTables, ExifDataType.Undefined); case ExifTagValue.JPEGTables:
case ExifTagValue.OECF: return new ExifByteArray(ExifTag.OECF, ExifDataType.Undefined); return new ExifByteArray(ExifTag.JPEGTables, ExifDataType.Undefined);
case ExifTagValue.ExifVersion: return new ExifByteArray(ExifTag.ExifVersion, ExifDataType.Undefined); case ExifTagValue.OECF:
case ExifTagValue.ComponentsConfiguration: return new ExifByteArray(ExifTag.ComponentsConfiguration, ExifDataType.Undefined); return new ExifByteArray(ExifTag.OECF, ExifDataType.Undefined);
case ExifTagValue.MakerNote: return new ExifByteArray(ExifTag.MakerNote, ExifDataType.Undefined); case ExifTagValue.ExifVersion:
case ExifTagValue.FlashpixVersion: return new ExifByteArray(ExifTag.FlashpixVersion, ExifDataType.Undefined); return new ExifByteArray(ExifTag.ExifVersion, ExifDataType.Undefined);
case ExifTagValue.SpatialFrequencyResponse: return new ExifByteArray(ExifTag.SpatialFrequencyResponse, ExifDataType.Undefined); case ExifTagValue.ComponentsConfiguration:
case ExifTagValue.SpatialFrequencyResponse2: return new ExifByteArray(ExifTag.SpatialFrequencyResponse2, ExifDataType.Undefined); return new ExifByteArray(ExifTag.ComponentsConfiguration, ExifDataType.Undefined);
case ExifTagValue.Noise: return new ExifByteArray(ExifTag.Noise, ExifDataType.Undefined); case ExifTagValue.MakerNote:
case ExifTagValue.CFAPattern: return new ExifByteArray(ExifTag.CFAPattern, ExifDataType.Undefined); return new ExifByteArray(ExifTag.MakerNote, ExifDataType.Undefined);
case ExifTagValue.DeviceSettingDescription: return new ExifByteArray(ExifTag.DeviceSettingDescription, ExifDataType.Undefined); case ExifTagValue.FlashpixVersion:
case ExifTagValue.ImageSourceData: return new ExifByteArray(ExifTag.ImageSourceData, ExifDataType.Undefined); return new ExifByteArray(ExifTag.FlashpixVersion, ExifDataType.Undefined);
case ExifTagValue.SpatialFrequencyResponse:
return new ExifByteArray(ExifTag.SpatialFrequencyResponse, ExifDataType.Undefined);
case ExifTagValue.SpatialFrequencyResponse2:
return new ExifByteArray(ExifTag.SpatialFrequencyResponse2, ExifDataType.Undefined);
case ExifTagValue.Noise:
return new ExifByteArray(ExifTag.Noise, ExifDataType.Undefined);
case ExifTagValue.CFAPattern:
return new ExifByteArray(ExifTag.CFAPattern, ExifDataType.Undefined);
case ExifTagValue.DeviceSettingDescription:
return new ExifByteArray(ExifTag.DeviceSettingDescription, ExifDataType.Undefined);
case ExifTagValue.ImageSourceData:
return new ExifByteArray(ExifTag.ImageSourceData, ExifDataType.Undefined);
case ExifTagValue.UserComment: return new ExifEncodedString(ExifTag.UserComment); case ExifTagValue.UserComment:
case ExifTagValue.GPSProcessingMethod: return new ExifEncodedString(ExifTag.GPSProcessingMethod); return new ExifEncodedString(ExifTag.UserComment);
case ExifTagValue.GPSAreaInformation: return new ExifEncodedString(ExifTag.GPSAreaInformation); case ExifTagValue.GPSProcessingMethod:
return new ExifEncodedString(ExifTag.GPSProcessingMethod);
case ExifTagValue.GPSAreaInformation:
return new ExifEncodedString(ExifTag.GPSAreaInformation);
default: return null; default:
return null;
} }
} }
} }

17
tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs

@ -1,6 +1,7 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System;
using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using Xunit; using Xunit;
@ -602,14 +603,18 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif.Values
[MemberData(nameof(EncodedStringTags))] [MemberData(nameof(EncodedStringTags))]
public void ExifEncodedStringTests(ExifTag tag) public void ExifEncodedStringTests(ExifTag tag)
{ {
var expected = new EncodedString(EncodedString.CharacterCode.JIS, "test string"); foreach (object code in Enum.GetValues(typeof(EncodedString.CharacterCode)))
ExifValue value = ExifValues.Create(tag); {
var charCode = (EncodedString.CharacterCode)code;
var expected = new EncodedString(charCode, "test string");
ExifValue value = ExifValues.Create(tag);
Assert.False(value.TrySetValue(123)); Assert.False(value.TrySetValue(123));
Assert.True(value.TrySetValue(expected)); Assert.True(value.TrySetValue(expected));
var typed = (ExifEncodedString)value; var typed = (ExifEncodedString)value;
Assert.Equal(expected, typed.Value); Assert.Equal(expected, typed.Value);
}
} }
} }
} }

Loading…
Cancel
Save