/// <summary> /// Reads a property item specified by the PropertyItemID value and returns it as a string value. /// </summary> /// <param name="nPropertyID">Specifies the PropertyItem to get and read.</param> /// <returns></returns> public string GetExifProperty(PropertyItemID nPropertyID) { // Return an empty value if the PropertyItems array is null. if (m_oPropertyItems == null) return string.Empty; int nID = (int)nPropertyID; string sData = string.Empty; foreach (PropertyItem oPropertyItem in m_oPropertyItems) { if ((oPropertyItem != null) && (oPropertyItem.Id == nID)) { switch (oPropertyItem.Type) { case PROP_TYPE_BYTE: case PROP_TYPE_ASCII: sData = FormatTypeASCIIValue(oPropertyItem, nPropertyID); break; case PROP_TYPE_RATIONAL: sData = FormatTypeRationalValue(oPropertyItem, nPropertyID); break; case PROP_TYPE_SRATIONAL: sData = FormatTypeSRationalValue(oPropertyItem, nPropertyID); break; case PROP_TYPE_SHORT: sData = FormatTypeShortValue(oPropertyItem, nPropertyID); break; case PROP_TYPE_UNDEFINED: sData = FormatTypeUndefinedValue(oPropertyItem, nPropertyID); break; } break; } } return sData; }
/// <summary> /// /// </summary> /// <param name="oPropertyItem"></param> /// <param name="nID"></param> /// <returns></returns> private string FormatTypeUndefinedValue(PropertyItem oPropertyItem, PropertyItemID nID) { switch (nID) { case PropertyItemID.ComponentsConfiguration: return GetComponentsConfiguration(oPropertyItem); case PropertyItemID.ExifVersion: return ASCIIEncoding.ASCII.GetString(oPropertyItem.Value); default: return string.Empty; } }
/// <summary> /// /// </summary> /// <param name="oPropertyItem"></param> /// <param name="nID"></param> /// <returns></returns> private string FormatTypeASCIIValue(PropertyItem oPropertyItem, PropertyItemID nID) { switch (nID) { case PropertyItemID.XPComment: case PropertyItemID.XPSubject: return UnicodeEncoding.Unicode.GetString(oPropertyItem.Value); default: return ASCIIEncoding.ASCII.GetString(oPropertyItem.Value); } }
/// <summary> /// /// </summary> /// <param name="oPropertyItem"></param> /// <param name="nID"></param> /// <returns></returns> private string FormatTypeSRationalValue(PropertyItem oPropertyItem, PropertyItemID nID) { if (oPropertyItem.Len == 8) { int n = BitConverter.ToInt32(oPropertyItem.Value, 0); int d = BitConverter.ToInt32(oPropertyItem.Value, 4); switch (nID) { case PropertyItemID.ShutterSpeed: case PropertyItemID.BrightnessValue: return ((float)n / d).ToString("N2"); } } return string.Empty; }
/// <summary> /// /// </summary> /// <param name="oPropertyItem"></param> /// <param name="nID"></param> /// <returns></returns> private string FormatTypeRationalValue(PropertyItem oPropertyItem, PropertyItemID nID) { if (oPropertyItem.Len == 8) { uint n = BitConverter.ToUInt32(oPropertyItem.Value, 0); uint d = BitConverter.ToUInt32(oPropertyItem.Value, 4); switch (nID) { case PropertyItemID.CompressedBitsPerPixel: case PropertyItemID.ExposureTime: return ((float)n / d).ToString("N2"); case PropertyItemID.FNumber: return ((float)n / d).ToString("N1"); case PropertyItemID.MaxAperture: return (n / d).ToString(); case PropertyItemID.FocalLength: return (n / d).ToString() + " mm"; } } return string.Empty; }
/// <summary> /// /// </summary> /// <param name="oPropertyItem"></param> /// <param name="nID"></param> /// <returns></returns> private string FormatTypeShortValue(PropertyItem oPropertyItem, PropertyItemID nID) { switch (nID) { case PropertyItemID.Compression: return GetCompression(oPropertyItem); case PropertyItemID.Rating: return GetRating(oPropertyItem); case PropertyItemID.ColorSpace: return GetColourSpace(oPropertyItem); case PropertyItemID.ExposureMode: return GetExposureMode(oPropertyItem); case PropertyItemID.ExposureProgram: return GetExposureProgram(oPropertyItem); case PropertyItemID.Orientation: return GetOrientation(oPropertyItem); case PropertyItemID.Flash: return GetFlash(oPropertyItem); case PropertyItemID.MeteringMode: return GetMeteringMode(oPropertyItem); case PropertyItemID.ResolutionUnit: return GetResolutionUnit(oPropertyItem); case PropertyItemID.SceneCaptureType: return GetSceneCaptureType(oPropertyItem); case PropertyItemID.WhiteBalance: return GetWhiteBalance(oPropertyItem); case PropertyItemID.YCbCrPositioning: return GetYCbCrPositioning(oPropertyItem); case PropertyItemID.YCbCrSubSampling: return GetYCbCrSubSampling(oPropertyItem); case PropertyItemID.PhotometricInterpretation: return GetPhotometricInterpretation(oPropertyItem); case PropertyItemID.Thresholding: return GetThresholding(oPropertyItem); case PropertyItemID.LightSource: return GetLightSource(oPropertyItem); case PropertyItemID.Contrast: return GetContrast(oPropertyItem); case PropertyItemID.Saturation: return GetSaturation(oPropertyItem); case PropertyItemID.Sharpness: return GetSharpness(oPropertyItem); case PropertyItemID.ISOSpeed: return oPropertyItem.Value[0].ToString(); default: return string.Empty; } }