public void ReadWLPGRegions(string sourceFile) { // Declare a bunch of XMP paths (see my last blog for details) string microsoftRegions = @"/xmp/MP:RegionInfo/MPRI:Regions"; string microsoftPersonDisplayName = @"/MPReg:PersonDisplayName"; string microsoftRectangle = @"/MPReg:Rectangle"; BitmapCreateOptions createOptions = BitmapCreateOptions.PreservePixelFormat | BitmapCreateOptions.IgnoreColorProfile; using (Stream sourceStream = File.Open(sourceFile, FileMode.Open, FileAccess.Read)) { BitmapDecoder sourceDecoder = BitmapDecoder.Create(sourceStream, createOptions, BitmapCacheOption.None); // Check source has valid frames if (sourceDecoder.Frames[0] != null && sourceDecoder.Frames[0].Metadata != null) { BitmapMetadata sourceMetadata = sourceDecoder.Frames[0].Metadata as BitmapMetadata; // Check there is a RegionInfo if (sourceMetadata.ContainsQuery(microsoftRegions)) { BitmapMetadata regionsMetadata = sourceMetadata.GetQuery(microsoftRegions) as BitmapMetadata; // Loop through each Region foreach (string regionQuery in regionsMetadata) { string regionFullQuery = microsoftRegions + regionQuery; // Query for all the data for this region BitmapMetadata regionMetadata = sourceMetadata.GetQuery(regionFullQuery) as BitmapMetadata; if (regionMetadata != null) { if (regionMetadata.ContainsQuery(microsoftPersonDisplayName)) { Console.WriteLine("PersonDisplayName:\t" + regionMetadata.GetQuery(WpfProperties.MicrosoftPersonDisplayName).ToString()); } if (regionMetadata.ContainsQuery(microsoftRectangle)) { Console.WriteLine("Rectangle:\t\t" + regionMetadata.GetQuery(WpfProperties.MicrosoftRectangle).ToString()); } } } } } } } |