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; } }
protected virtual void readXMPMetadata(XMPLib.MetaData xmpMetaDataReader, BaseMetadata media) { string title = ""; xmpMetaDataReader.getLocalizedText(Consts.XMP_NS_DC, "title", "en", "en-US", ref title); media.Title = title; string description = ""; xmpMetaDataReader.getLocalizedText(Consts.XMP_NS_DC, "description", "en", "en-US", ref description); media.Description = description; string author = ""; xmpMetaDataReader.getArrayItem(Consts.XMP_NS_DC, "creator", 1, ref author); media.Author = author; string copyright = ""; xmpMetaDataReader.getLocalizedText(Consts.XMP_NS_DC, "rights", "en", "en-US", ref copyright); media.Copyright = copyright; string software = ""; xmpMetaDataReader.getProperty(Consts.XMP_NS_XMP, "CreatorTool", ref software); media.Software = software; Nullable<double> rating = new Nullable<double>(); xmpMetaDataReader.getProperty_Float(Consts.XMP_NS_XMP, "Rating", ref rating); media.Rating = rating; Nullable<DateTime> date = new Nullable<DateTime>(); xmpMetaDataReader.getProperty_Date(Consts.XMP_NS_XMP, "MetadataDate", ref date); if (date != null && date < sqlMinDate) { media.MetadataDate = null; } else { media.MetadataDate = date; } xmpMetaDataReader.getProperty_Date(Consts.XMP_NS_XMP, "CreateDate", ref date); if (date != null && date < sqlMinDate) { media.CreationDate = null; } else { media.CreationDate = date; } xmpMetaDataReader.getProperty_Date(Consts.XMP_NS_XMP, "ModifyDate", ref date); if (date != null && date < sqlMinDate) { media.MetadataModifiedDate = null; } else { media.MetadataModifiedDate = date; } string longitude = null; string latitude = null; xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "GPSLatitude", ref latitude); xmpMetaDataReader.getProperty(Consts.XMP_NS_EXIF, "GPSLongitude", ref longitude); GeoTagCoordinatePair geoPair = new GeoTagCoordinatePair(latitude, longitude); media.Latitude = geoPair.LatDecimal; media.Longitude = geoPair.LonDecimal; media.Tags.Clear(); int nrTags = xmpMetaDataReader.countArrayItems(Consts.XMP_NS_DC, "subject"); for (int i = 1; i <= nrTags; i++) { string tagName = ""; xmpMetaDataReader.getArrayItem(Consts.XMP_NS_DC, "subject", i, ref tagName); if (tagName != null) { Tag newTag = new Tag(); newTag.Name = tagName.Trim(); media.Tags.Add(newTag); } } /*string imageData = ""; bool exists = xmpMetaDataReader.getStructField(Consts.XMP_NS_XMP, "xmpGImg", Consts.XMP_NS_XMP_Image, "image", ref imageData); if (exists) { BitmapSource thumbnail = MediaViewer.Infrastructure.Utils.ImageUtils.jpegBase64StringToImage(imageData); }*/ }