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))
{
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);
}
}
@ -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.
// Again, the old datatypes TIFF_IFD, and the hardly recommendable TIFF_LONG, are still valid, too.
// https://www.awaresystems.be/imaging/tiff/bigtiff.html
ExifValue exifValue = null;
ExifValue exifValue;
switch (tag)
{
case ExifTagValue.StripOffsets:

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

@ -15,21 +15,36 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
{
switch (dataType)
{
case ExifDataType.Byte: return isArray ? (ExifValue)new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType);
case ExifDataType.DoubleFloat: return isArray ? (ExifValue)new ExifDoubleArray(tag) : new ExifDouble(tag);
case ExifDataType.SingleFloat: return isArray ? (ExifValue)new ExifFloatArray(tag) : new ExifFloat(tag);
case ExifDataType.Long: return isArray ? (ExifValue)new ExifLongArray(tag) : new ExifLong(tag);
case ExifDataType.Long8: return isArray ? (ExifValue)new ExifLong8Array(tag) : new ExifLong8(tag);
case ExifDataType.Rational: return isArray ? (ExifValue)new ExifRationalArray(tag) : new ExifRational(tag);
case ExifDataType.Short: return isArray ? (ExifValue)new ExifShortArray(tag) : new ExifShort(tag);
case ExifDataType.SignedByte: return isArray ? (ExifValue)new ExifSignedByteArray(tag) : new ExifSignedByte(tag);
case ExifDataType.SignedLong: return isArray ? (ExifValue)new ExifSignedLongArray(tag) : new ExifSignedLong(tag);
case ExifDataType.SignedLong8: return isArray ? (ExifValue)new ExifSignedLong8Array(tag) : new ExifSignedLong8(tag);
case ExifDataType.SignedRational: return isArray ? (ExifValue)new ExifSignedRationalArray(tag) : new ExifSignedRational(tag);
case ExifDataType.SignedShort: return isArray ? (ExifValue)new ExifSignedShortArray(tag) : new ExifSignedShort(tag);
case ExifDataType.Ascii: return new ExifString(tag);
case ExifDataType.Undefined: return isArray ? (ExifValue)new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType);
default: return null;
case ExifDataType.Byte:
return isArray ? new ExifByteArray(tag, dataType) : new ExifByte(tag, dataType);
case ExifDataType.DoubleFloat:
return isArray ? new ExifDoubleArray(tag) : new ExifDouble(tag);
case ExifDataType.SingleFloat:
return isArray ? new ExifFloatArray(tag) : new ExifFloat(tag);
case ExifDataType.Long:
return isArray ? new ExifLongArray(tag) : new ExifLong(tag);
case ExifDataType.Long8:
return isArray ? new ExifLong8Array(tag) : new ExifLong8(tag);
case ExifDataType.Rational:
return isArray ? new ExifRationalArray(tag) : new ExifRational(tag);
case ExifDataType.Short:
return isArray ? new ExifShortArray(tag) : new ExifShort(tag);
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)
{
case ExifTagValue.FaxProfile: return new ExifByte(ExifTag.FaxProfile, ExifDataType.Byte);
case ExifTagValue.ModeNumber: return new ExifByte(ExifTag.ModeNumber, ExifDataType.Byte);
case ExifTagValue.GPSAltitudeRef: return new ExifByte(ExifTag.GPSAltitudeRef, ExifDataType.Byte);
case ExifTagValue.FaxProfile:
return new ExifByte(ExifTag.FaxProfile, 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.VersionYear: return new ExifByteArray(ExifTag.VersionYear, ExifDataType.Byte);
case ExifTagValue.XMP: 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.ClipPath:
return new ExifByteArray(ExifTag.ClipPath, ExifDataType.Byte);
case ExifTagValue.VersionYear:
return new ExifByteArray(ExifTag.VersionYear, ExifDataType.Byte);
case ExifTagValue.XMP:
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.IntergraphMatrix: return new ExifDoubleArray(ExifTag.IntergraphMatrix);
case ExifTagValue.ModelTiePoint: return new ExifDoubleArray(ExifTag.ModelTiePoint);
case ExifTagValue.ModelTransform: return new ExifDoubleArray(ExifTag.ModelTransform);
case ExifTagValue.PixelScale:
return new ExifDoubleArray(ExifTag.PixelScale);
case ExifTagValue.IntergraphMatrix:
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.SubIFDOffset: return new ExifLong(ExifTag.SubIFDOffset);
case ExifTagValue.GPSIFDOffset: return new ExifLong(ExifTag.GPSIFDOffset);
case ExifTagValue.T4Options: return new ExifLong(ExifTag.T4Options);
case ExifTagValue.T6Options: return new ExifLong(ExifTag.T6Options);
case ExifTagValue.XClipPathUnits: return new ExifLong(ExifTag.XClipPathUnits);
case ExifTagValue.YClipPathUnits: return new ExifLong(ExifTag.YClipPathUnits);
case ExifTagValue.ProfileType: return new ExifLong(ExifTag.ProfileType);
case ExifTagValue.CodingMethods: return new ExifLong(ExifTag.CodingMethods);
case ExifTagValue.T82ptions: return new ExifLong(ExifTag.T82ptions);
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.SubfileType:
return new ExifLong(ExifTag.SubfileType);
case ExifTagValue.SubIFDOffset:
return new ExifLong(ExifTag.SubIFDOffset);
case ExifTagValue.GPSIFDOffset:
return new ExifLong(ExifTag.GPSIFDOffset);
case ExifTagValue.T4Options:
return new ExifLong(ExifTag.T4Options);
case ExifTagValue.T6Options:
return new ExifLong(ExifTag.T6Options);
case ExifTagValue.XClipPathUnits:
return new ExifLong(ExifTag.XClipPathUnits);
case ExifTagValue.YClipPathUnits:
return new ExifLong(ExifTag.YClipPathUnits);
case ExifTagValue.ProfileType:
return new ExifLong(ExifTag.ProfileType);
case ExifTagValue.CodingMethods:
return new ExifLong(ExifTag.CodingMethods);
case ExifTagValue.T82ptions:
return new ExifLong(ExifTag.T82ptions);
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.FreeByteCounts: return new ExifLongArray(ExifTag.FreeByteCounts);
case ExifTagValue.ColorResponseUnit: return new ExifLongArray(ExifTag.ColorResponseUnit);
case ExifTagValue.TileOffsets: return new ExifLongArray(ExifTag.TileOffsets);
case ExifTagValue.SMinSampleValue: return new ExifLongArray(ExifTag.SMinSampleValue);
case ExifTagValue.SMaxSampleValue: return new ExifLongArray(ExifTag.SMaxSampleValue);
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.FreeOffsets:
return new ExifLongArray(ExifTag.FreeOffsets);
case ExifTagValue.FreeByteCounts:
return new ExifLongArray(ExifTag.FreeByteCounts);
case ExifTagValue.ColorResponseUnit:
return new ExifLongArray(ExifTag.ColorResponseUnit);
case ExifTagValue.TileOffsets:
return new ExifLongArray(ExifTag.TileOffsets);
case ExifTagValue.SMinSampleValue:
return new ExifLongArray(ExifTag.SMinSampleValue);
case ExifTagValue.SMaxSampleValue:
return new ExifLongArray(ExifTag.SMaxSampleValue);
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.ImageLength: return new ExifNumber(ExifTag.ImageLength);
case ExifTagValue.RowsPerStrip: return new ExifNumber(ExifTag.RowsPerStrip);
case ExifTagValue.TileWidth: return new ExifNumber(ExifTag.TileWidth);
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.ImageWidth:
return new ExifNumber(ExifTag.ImageWidth);
case ExifTagValue.ImageLength:
return new ExifNumber(ExifTag.ImageLength);
case ExifTagValue.RowsPerStrip:
return new ExifNumber(ExifTag.RowsPerStrip);
case ExifTagValue.TileWidth:
return new ExifNumber(ExifTag.TileWidth);
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.StripOffsets: return new ExifNumberArray(ExifTag.StripOffsets);
case ExifTagValue.TileByteCounts: return new ExifNumberArray(ExifTag.TileByteCounts);
case ExifTagValue.ImageLayer: return new ExifNumberArray(ExifTag.ImageLayer);
case ExifTagValue.StripByteCounts:
return new ExifNumberArray(ExifTag.StripByteCounts);
case ExifTagValue.StripOffsets:
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.YPosition: return new ExifRational(ExifTag.YPosition);
case ExifTagValue.XResolution: return new ExifRational(ExifTag.XResolution);
case ExifTagValue.YResolution: return new ExifRational(ExifTag.YResolution);
case ExifTagValue.BatteryLevel: return new ExifRational(ExifTag.BatteryLevel);
case ExifTagValue.ExposureTime: return new ExifRational(ExifTag.ExposureTime);
case ExifTagValue.FNumber: return new ExifRational(ExifTag.FNumber);
case ExifTagValue.MDScalePixel: return new ExifRational(ExifTag.MDScalePixel);
case ExifTagValue.CompressedBitsPerPixel: return new ExifRational(ExifTag.CompressedBitsPerPixel);
case ExifTagValue.ApertureValue: return new ExifRational(ExifTag.ApertureValue);
case ExifTagValue.MaxApertureValue: return new ExifRational(ExifTag.MaxApertureValue);
case ExifTagValue.SubjectDistance: return new ExifRational(ExifTag.SubjectDistance);
case ExifTagValue.FocalLength: return new ExifRational(ExifTag.FocalLength);
case ExifTagValue.FlashEnergy2: return new ExifRational(ExifTag.FlashEnergy2);
case ExifTagValue.FocalPlaneXResolution2: return new ExifRational(ExifTag.FocalPlaneXResolution2);
case ExifTagValue.FocalPlaneYResolution2: 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.XPosition:
return new ExifRational(ExifTag.XPosition);
case ExifTagValue.YPosition:
return new ExifRational(ExifTag.YPosition);
case ExifTagValue.XResolution:
return new ExifRational(ExifTag.XResolution);
case ExifTagValue.YResolution:
return new ExifRational(ExifTag.YResolution);
case ExifTagValue.BatteryLevel:
return new ExifRational(ExifTag.BatteryLevel);
case ExifTagValue.ExposureTime:
return new ExifRational(ExifTag.ExposureTime);
case ExifTagValue.FNumber:
return new ExifRational(ExifTag.FNumber);
case ExifTagValue.MDScalePixel:
return new ExifRational(ExifTag.MDScalePixel);
case ExifTagValue.CompressedBitsPerPixel:
return new ExifRational(ExifTag.CompressedBitsPerPixel);
case ExifTagValue.ApertureValue:
return new ExifRational(ExifTag.ApertureValue);
case ExifTagValue.MaxApertureValue:
return new ExifRational(ExifTag.MaxApertureValue);
case ExifTagValue.SubjectDistance:
return new ExifRational(ExifTag.SubjectDistance);
case ExifTagValue.FocalLength:
return new ExifRational(ExifTag.FocalLength);
case ExifTagValue.FlashEnergy2:
return new ExifRational(ExifTag.FlashEnergy2);
case ExifTagValue.FocalPlaneXResolution2:
return new ExifRational(ExifTag.FocalPlaneXResolution2);
case ExifTagValue.FocalPlaneYResolution2:
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.PrimaryChromaticities: return new ExifRationalArray(ExifTag.PrimaryChromaticities);
case ExifTagValue.YCbCrCoefficients: return new ExifRationalArray(ExifTag.YCbCrCoefficients);
case ExifTagValue.ReferenceBlackWhite: return new ExifRationalArray(ExifTag.ReferenceBlackWhite);
case ExifTagValue.GPSLatitude: 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.WhitePoint:
return new ExifRationalArray(ExifTag.WhitePoint);
case ExifTagValue.PrimaryChromaticities:
return new ExifRationalArray(ExifTag.PrimaryChromaticities);
case ExifTagValue.YCbCrCoefficients:
return new ExifRationalArray(ExifTag.YCbCrCoefficients);
case ExifTagValue.ReferenceBlackWhite:
return new ExifRationalArray(ExifTag.ReferenceBlackWhite);
case ExifTagValue.GPSLatitude:
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.Compression: return new ExifShort(ExifTag.Compression);
case ExifTagValue.PhotometricInterpretation: return new ExifShort(ExifTag.PhotometricInterpretation);
case ExifTagValue.Thresholding: return new ExifShort(ExifTag.Thresholding);
case ExifTagValue.CellWidth: return new ExifShort(ExifTag.CellWidth);
case ExifTagValue.CellLength: return new ExifShort(ExifTag.CellLength);
case ExifTagValue.FillOrder: return new ExifShort(ExifTag.FillOrder);
case ExifTagValue.Orientation: return new ExifShort(ExifTag.Orientation);
case ExifTagValue.SamplesPerPixel: return new ExifShort(ExifTag.SamplesPerPixel);
case ExifTagValue.PlanarConfiguration: return new ExifShort(ExifTag.PlanarConfiguration);
case ExifTagValue.Predictor: return new ExifShort(ExifTag.Predictor);
case ExifTagValue.GrayResponseUnit: return new ExifShort(ExifTag.GrayResponseUnit);
case ExifTagValue.ResolutionUnit: return new ExifShort(ExifTag.ResolutionUnit);
case ExifTagValue.CleanFaxData: return new ExifShort(ExifTag.CleanFaxData);
case ExifTagValue.InkSet: return new ExifShort(ExifTag.InkSet);
case ExifTagValue.NumberOfInks: return new ExifShort(ExifTag.NumberOfInks);
case ExifTagValue.DotRange: return new ExifShort(ExifTag.DotRange);
case ExifTagValue.Indexed: return new ExifShort(ExifTag.Indexed);
case ExifTagValue.OPIProxy: return new ExifShort(ExifTag.OPIProxy);
case ExifTagValue.JPEGProc: return new ExifShort(ExifTag.JPEGProc);
case ExifTagValue.JPEGRestartInterval: return new ExifShort(ExifTag.JPEGRestartInterval);
case ExifTagValue.YCbCrPositioning: return new ExifShort(ExifTag.YCbCrPositioning);
case ExifTagValue.Rating: return new ExifShort(ExifTag.Rating);
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.OldSubfileType:
return new ExifShort(ExifTag.OldSubfileType);
case ExifTagValue.Compression:
return new ExifShort(ExifTag.Compression);
case ExifTagValue.PhotometricInterpretation:
return new ExifShort(ExifTag.PhotometricInterpretation);
case ExifTagValue.Thresholding:
return new ExifShort(ExifTag.Thresholding);
case ExifTagValue.CellWidth:
return new ExifShort(ExifTag.CellWidth);
case ExifTagValue.CellLength:
return new ExifShort(ExifTag.CellLength);
case ExifTagValue.FillOrder:
return new ExifShort(ExifTag.FillOrder);
case ExifTagValue.Orientation:
return new ExifShort(ExifTag.Orientation);
case ExifTagValue.SamplesPerPixel:
return new ExifShort(ExifTag.SamplesPerPixel);
case ExifTagValue.PlanarConfiguration:
return new ExifShort(ExifTag.PlanarConfiguration);
case ExifTagValue.Predictor:
return new ExifShort(ExifTag.Predictor);
case ExifTagValue.GrayResponseUnit:
return new ExifShort(ExifTag.GrayResponseUnit);
case ExifTagValue.ResolutionUnit:
return new ExifShort(ExifTag.ResolutionUnit);
case ExifTagValue.CleanFaxData:
return new ExifShort(ExifTag.CleanFaxData);
case ExifTagValue.InkSet:
return new ExifShort(ExifTag.InkSet);
case ExifTagValue.NumberOfInks:
return new ExifShort(ExifTag.NumberOfInks);
case ExifTagValue.DotRange:
return new ExifShort(ExifTag.DotRange);
case ExifTagValue.Indexed:
return new ExifShort(ExifTag.Indexed);
case ExifTagValue.OPIProxy:
return new ExifShort(ExifTag.OPIProxy);
case ExifTagValue.JPEGProc:
return new ExifShort(ExifTag.JPEGProc);
case ExifTagValue.JPEGRestartInterval:
return new ExifShort(ExifTag.JPEGRestartInterval);
case ExifTagValue.YCbCrPositioning:
return new ExifShort(ExifTag.YCbCrPositioning);
case ExifTagValue.Rating:
return new ExifShort(ExifTag.Rating);
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.MinSampleValue: return new ExifShortArray(ExifTag.MinSampleValue);
case ExifTagValue.MaxSampleValue: return new ExifShortArray(ExifTag.MaxSampleValue);
case ExifTagValue.GrayResponseCurve: return new ExifShortArray(ExifTag.GrayResponseCurve);
case ExifTagValue.ColorMap: return new ExifShortArray(ExifTag.ColorMap);
case ExifTagValue.ExtraSamples: return new ExifShortArray(ExifTag.ExtraSamples);
case ExifTagValue.PageNumber: return new ExifShortArray(ExifTag.PageNumber);
case ExifTagValue.TransferFunction: return new ExifShortArray(ExifTag.TransferFunction);
case ExifTagValue.HalftoneHints: return new ExifShortArray(ExifTag.HalftoneHints);
case ExifTagValue.SampleFormat: 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.BitsPerSample:
return new ExifShortArray(ExifTag.BitsPerSample);
case ExifTagValue.MinSampleValue:
return new ExifShortArray(ExifTag.MinSampleValue);
case ExifTagValue.MaxSampleValue:
return new ExifShortArray(ExifTag.MaxSampleValue);
case ExifTagValue.GrayResponseCurve:
return new ExifShortArray(ExifTag.GrayResponseCurve);
case ExifTagValue.ColorMap:
return new ExifShortArray(ExifTag.ColorMap);
case ExifTagValue.ExtraSamples:
return new ExifShortArray(ExifTag.ExtraSamples);
case ExifTagValue.PageNumber:
return new ExifShortArray(ExifTag.PageNumber);
case ExifTagValue.TransferFunction:
return new ExifShortArray(ExifTag.TransferFunction);
case ExifTagValue.HalftoneHints:
return new ExifShortArray(ExifTag.HalftoneHints);
case ExifTagValue.SampleFormat:
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.BrightnessValue: return new ExifSignedRational(ExifTag.BrightnessValue);
case ExifTagValue.ExposureBiasValue: 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.ShutterSpeedValue:
return new ExifSignedRational(ExifTag.ShutterSpeedValue);
case ExifTagValue.BrightnessValue:
return new ExifSignedRational(ExifTag.BrightnessValue);
case ExifTagValue.ExposureBiasValue:
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.Make: return new ExifString(ExifTag.Make);
case ExifTagValue.Model: return new ExifString(ExifTag.Model);
case ExifTagValue.Software: return new ExifString(ExifTag.Software);
case ExifTagValue.DateTime: return new ExifString(ExifTag.DateTime);
case ExifTagValue.Artist: return new ExifString(ExifTag.Artist);
case ExifTagValue.HostComputer: return new ExifString(ExifTag.HostComputer);
case ExifTagValue.Copyright: return new ExifString(ExifTag.Copyright);
case ExifTagValue.DocumentName: return new ExifString(ExifTag.DocumentName);
case ExifTagValue.PageName: return new ExifString(ExifTag.PageName);
case ExifTagValue.InkNames: return new ExifString(ExifTag.InkNames);
case ExifTagValue.TargetPrinter: return new ExifString(ExifTag.TargetPrinter);
case ExifTagValue.ImageID: return new ExifString(ExifTag.ImageID);
case ExifTagValue.MDLabName: return new ExifString(ExifTag.MDLabName);
case ExifTagValue.MDSampleInfo: return new ExifString(ExifTag.MDSampleInfo);
case ExifTagValue.MDPrepDate: return new ExifString(ExifTag.MDPrepDate);
case ExifTagValue.MDPrepTime: return new ExifString(ExifTag.MDPrepTime);
case ExifTagValue.MDFileUnits: return new ExifString(ExifTag.MDFileUnits);
case ExifTagValue.SEMInfo: return new ExifString(ExifTag.SEMInfo);
case ExifTagValue.SpectralSensitivity: return new ExifString(ExifTag.SpectralSensitivity);
case ExifTagValue.DateTimeOriginal: return new ExifString(ExifTag.DateTimeOriginal);
case ExifTagValue.DateTimeDigitized: return new ExifString(ExifTag.DateTimeDigitized);
case ExifTagValue.SubsecTime: return new ExifString(ExifTag.SubsecTime);
case ExifTagValue.SubsecTimeOriginal: return new ExifString(ExifTag.SubsecTimeOriginal);
case ExifTagValue.SubsecTimeDigitized: return new ExifString(ExifTag.SubsecTimeDigitized);
case ExifTagValue.RelatedSoundFile: return new ExifString(ExifTag.RelatedSoundFile);
case ExifTagValue.FaxSubaddress: return new ExifString(ExifTag.FaxSubaddress);
case ExifTagValue.OffsetTime: return new ExifString(ExifTag.OffsetTime);
case ExifTagValue.OffsetTimeOriginal: return new ExifString(ExifTag.OffsetTimeOriginal);
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.ImageDescription:
return new ExifString(ExifTag.ImageDescription);
case ExifTagValue.Make:
return new ExifString(ExifTag.Make);
case ExifTagValue.Model:
return new ExifString(ExifTag.Model);
case ExifTagValue.Software:
return new ExifString(ExifTag.Software);
case ExifTagValue.DateTime:
return new ExifString(ExifTag.DateTime);
case ExifTagValue.Artist:
return new ExifString(ExifTag.Artist);
case ExifTagValue.HostComputer:
return new ExifString(ExifTag.HostComputer);
case ExifTagValue.Copyright:
return new ExifString(ExifTag.Copyright);
case ExifTagValue.DocumentName:
return new ExifString(ExifTag.DocumentName);
case ExifTagValue.PageName:
return new ExifString(ExifTag.PageName);
case ExifTagValue.InkNames:
return new ExifString(ExifTag.InkNames);
case ExifTagValue.TargetPrinter:
return new ExifString(ExifTag.TargetPrinter);
case ExifTagValue.ImageID:
return new ExifString(ExifTag.ImageID);
case ExifTagValue.MDLabName:
return new ExifString(ExifTag.MDLabName);
case ExifTagValue.MDSampleInfo:
return new ExifString(ExifTag.MDSampleInfo);
case ExifTagValue.MDPrepDate:
return new ExifString(ExifTag.MDPrepDate);
case ExifTagValue.MDPrepTime:
return new ExifString(ExifTag.MDPrepTime);
case ExifTagValue.MDFileUnits:
return new ExifString(ExifTag.MDFileUnits);
case ExifTagValue.SEMInfo:
return new ExifString(ExifTag.SEMInfo);
case ExifTagValue.SpectralSensitivity:
return new ExifString(ExifTag.SpectralSensitivity);
case ExifTagValue.DateTimeOriginal:
return new ExifString(ExifTag.DateTimeOriginal);
case ExifTagValue.DateTimeDigitized:
return new ExifString(ExifTag.DateTimeDigitized);
case ExifTagValue.SubsecTime:
return new ExifString(ExifTag.SubsecTime);
case ExifTagValue.SubsecTimeOriginal:
return new ExifString(ExifTag.SubsecTimeOriginal);
case ExifTagValue.SubsecTimeDigitized:
return new ExifString(ExifTag.SubsecTimeDigitized);
case ExifTagValue.RelatedSoundFile:
return new ExifString(ExifTag.RelatedSoundFile);
case ExifTagValue.FaxSubaddress:
return new ExifString(ExifTag.FaxSubaddress);
case ExifTagValue.OffsetTime:
return new ExifString(ExifTag.OffsetTime);
case ExifTagValue.OffsetTimeOriginal:
return new ExifString(ExifTag.OffsetTimeOriginal);
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.SceneType: return new ExifByte(ExifTag.SceneType, ExifDataType.Undefined);
case ExifTagValue.FileSource:
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.OECF: return new ExifByteArray(ExifTag.OECF, ExifDataType.Undefined);
case ExifTagValue.ExifVersion: return new ExifByteArray(ExifTag.ExifVersion, ExifDataType.Undefined);
case ExifTagValue.ComponentsConfiguration: return new ExifByteArray(ExifTag.ComponentsConfiguration, ExifDataType.Undefined);
case ExifTagValue.MakerNote: return new ExifByteArray(ExifTag.MakerNote, ExifDataType.Undefined);
case ExifTagValue.FlashpixVersion: 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.JPEGTables:
return new ExifByteArray(ExifTag.JPEGTables, ExifDataType.Undefined);
case ExifTagValue.OECF:
return new ExifByteArray(ExifTag.OECF, ExifDataType.Undefined);
case ExifTagValue.ExifVersion:
return new ExifByteArray(ExifTag.ExifVersion, ExifDataType.Undefined);
case ExifTagValue.ComponentsConfiguration:
return new ExifByteArray(ExifTag.ComponentsConfiguration, ExifDataType.Undefined);
case ExifTagValue.MakerNote:
return new ExifByteArray(ExifTag.MakerNote, ExifDataType.Undefined);
case ExifTagValue.FlashpixVersion:
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.GPSProcessingMethod: return new ExifEncodedString(ExifTag.GPSProcessingMethod);
case ExifTagValue.GPSAreaInformation: return new ExifEncodedString(ExifTag.GPSAreaInformation);
case ExifTagValue.UserComment:
return new ExifEncodedString(ExifTag.UserComment);
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.
// Licensed under the Apache License, Version 2.0.
using System;
using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using Xunit;
@ -602,14 +603,18 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif.Values
[MemberData(nameof(EncodedStringTags))]
public void ExifEncodedStringTests(ExifTag tag)
{
var expected = new EncodedString(EncodedString.CharacterCode.JIS, "test string");
ExifValue value = ExifValues.Create(tag);
foreach (object code in Enum.GetValues(typeof(EncodedString.CharacterCode)))
{
var charCode = (EncodedString.CharacterCode)code;
var expected = new EncodedString(charCode, "test string");
ExifValue value = ExifValues.Create(tag);
Assert.False(value.TrySetValue(123));
Assert.True(value.TrySetValue(expected));
Assert.False(value.TrySetValue(123));
Assert.True(value.TrySetValue(expected));
var typed = (ExifEncodedString)value;
Assert.Equal(expected, typed.Value);
var typed = (ExifEncodedString)value;
Assert.Equal(expected, typed.Value);
}
}
}
}

Loading…
Cancel
Save