protected override void readXMPMetadata(XMPLib.MetaData xmpMetaDataReader, BaseMetadata media) { base.readXMPMetadata(xmpMetaDataReader, media); ImageMetadata image = media as ImageMetadata; Nullable<int> intVal = new Nullable<int>(); String temp = ""; bool exists = false; exists = xmpMetaDataReader.getStructField(Consts.XMP_NS_EXIF, "Flash", Consts.XMP_NS_EXIF, "exif:Fired", ref temp); if (exists) { try { image.FlashFired = Boolean.Parse(temp); } catch (Exception) { image.FlashFired = null; } } else { image.FlashFired = null; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "LightSource", ref intVal); if (intVal == null) { image.LightSource = null; } else { image.LightSource = (short)intVal; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "MeteringMode", ref intVal); if (intVal == null) { image.MeteringMode = null; } else { image.MeteringMode = (short)intVal; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "Saturation", ref intVal); if (intVal == null) { image.Saturation = null; } else { image.Saturation = (short)intVal; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "SceneCaptureType", ref intVal); if (intVal == null) { image.SceneCaptureType = null; } else { image.SceneCaptureType = (short)intVal; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "SensingMethod", ref intVal); if (intVal == null) { image.SensingMethod = null; } else { image.SensingMethod = (short)intVal; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "Sharpness", ref intVal); if (intVal == null) { image.Sharpness = null; } else { image.Sharpness = (short)intVal; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_TIFF, "Orientation", ref intVal); if (intVal == null) { image.Orientation = null; } else { image.Orientation = (short)intVal; } string subjectDistance = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "SubjectDistance", ref subjectDistance); image.SubjectDistance = parseRational(subjectDistance); string shutterSpeedValue = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "ShutterSpeedValue", ref shutterSpeedValue); image.ShutterSpeedValue = parseRational(shutterSpeedValue); xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "SubjectDistanceRange", ref intVal); if (intVal == null) { image.SubjectDistanceRange = null; } else { image.SubjectDistanceRange = (short)intVal; } string isoSpeedRating = ""; int nrSpeedRatings = xmpMetaDataReader.countArrayItems(Consts.XMP_NS_EXIF, "ISOSpeedRatings"); if (nrSpeedRatings > 0) { xmpMetaDataReader.getArrayItem(Consts.XMP_NS_EXIF, "ISOSpeedRatings", 1, ref isoSpeedRating); int value = 0; if (int.TryParse(isoSpeedRating, out value)) { image.ISOSpeedRating = value; } } else { image.ISOSpeedRating = null; } xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "WhiteBalance", ref intVal); if (intVal == null) { image.WhiteBalance = null; } else { image.WhiteBalance = (short)intVal; } String cameraMake = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_TIFF, "Make", ref cameraMake); image.CameraMake = cameraMake; String cameraModel = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_TIFF, "Model", ref cameraModel); image.CameraModel = cameraModel; String lens = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF_Aux, "Lens", ref lens); image.Lens = lens; String serialNumber = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF_Aux, "SerialNumber", ref serialNumber); image.SerialNumber = serialNumber; string exposureTime = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "ExposureTime", ref exposureTime); image.ExposureTime = parseRational(exposureTime); string fnumber = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "FNumber", ref fnumber); image.FNumber = parseRational(fnumber); string exposureBiasValue = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "ExposureBiasValue", ref exposureBiasValue); image.ExposureBiasValue = parseRational(exposureBiasValue); xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "ExposureProgram", ref intVal); if (intVal == null) { image.ExposureProgram = null; } else { image.ExposureProgram = (short)intVal; } string focalLength = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "FocalLength", ref focalLength); image.FocalLength = parseRational(focalLength); xmpMetaDataReader.getProperty_Int(Consts.XMP_NS_EXIF, "Contrast", ref intVal); if (intVal == null) { image.Contrast = null; } else { image.Contrast = (short)intVal; } }