views:

664

answers:

2

I'm aware that WPF allows you to use images that require WIC codecs to view (for the sake of argument, say a digital camera RAW file); however I can only see that it lets you show the image natively, but I can't see anyway of getting at the meta-data (for example, the exposure time).

It obviously can be done, as Windows Explorer shows it, but is this exposed through the .net API or do you reckon that it is just down to calling the native COM interfaces

+1  A: 

Check out my Intuipic project. In particular, the BitmapOrientationConverter class, which reads metadata to determine the image's orientation:

using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    BitmapFrame bitmapFrame = BitmapFrame.Create(fileStream, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
    BitmapMetadata bitmapMetadata = bitmapFrame.Metadata as BitmapMetadata;

    if ((bitmapMetadata != null) && (bitmapMetadata.ContainsQuery(_orientationQuery)))
    {
     object o = bitmapMetadata.GetQuery(_orientationQuery);

     if (o != null)
     {
      //refer to http://www.impulseadventure.com/photo/exif-orientation.html for details on orientation values
      switch ((ushort) o)
      {
       case 6:
        return 90D;
       case 3:
        return 180D;
       case 8:
        return 270D;
      }
     }
    }
}

HTH, Kent

Kent Boogaart
A: 

This tutorial Bitmap Coding and Metatdata in WPF seems to make sense - but I'm suprised that when there is no space for an "in place" metadata update that you have to recode the entire file with the resulting loss of quality - Surely there is a way to simply copy the coded image data without recoding?