TASSOGRAPHY

Photography and More
by Ben Vincent
TransparentPadder

Share On FacebookShare On Facebook
 
Ben's Blog (71)Ben's Blog (71)
Development (16)Development (16)
Lisa's Blog (6)Lisa's Blog (6)
 
Show All (94)Show All (94)
 
Jun 2010 (4)Jun 2010 (4)
May 2010 (2)May 2010 (2)
Apr 2010 (7)Apr 2010 (7)
Mar 2010 (5)Mar 2010 (5)
Feb 2010 (1)Feb 2010 (1)
Jan 2010 (3)Jan 2010 (3)
Nov 2009 (8)Nov 2009 (8)
Oct 2009 (4)Oct 2009 (4)
Sep 2009 (4)Sep 2009 (4)
Jul 2009 (6)Jul 2009 (6)
Jun 2009 (5)Jun 2009 (5)
May 2009 (7)May 2009 (7)
Mar 2009 (1)Mar 2009 (1)
Feb 2009 (5)Feb 2009 (5)
Jan 2009 (7)Jan 2009 (7)
Dec 2008 (6)Dec 2008 (6)
Oct 2008 (3)Oct 2008 (3)
Sep 2008 (3)Sep 2008 (3)
Aug 2008 (9)Aug 2008 (9)
Jul 2008 (3)Jul 2008 (3)
Jun 2008 (1)Jun 2008 (1)
 
Show All (94)Show All (94)
 
RSS & Atom FeedsRSS & Atom Feeds




TransparentPadder
Home Job Runner Image Usage Tracker Image Blog   |   Highlights   |   Photography   |   Contact   |   About    Atom & RSS Feeds  

Reading Photo Metadata Using Windows Imaging Component by Ben Vincent

I still see a lot of questions on the Internet and at work on how to read (& write) metadata in Photos. There are plenty of examples out there but they all appear to have some pitfalls. To be quite honest, the code I’ve been using for a number of years now is mature enough that it solves almost all the problems I’ve seen.

This blog is the first in a series that document how to read (this blog), write and manipulate photo metadata. You can find all my blogs on Windows Imaging Component here.

All this code is based on Windows Presentation Foundation (so you’ll need a reference to PresentationCore) which includes the Windows Imaging Component. These classes provide some very solid tools for reading and manipulating images. In particular the BitmapMetadata object provides access to data stored in Exif, XMP or IPTC in a file.

The following method takes a jpg photo filename as the parameter and returns a BitmapMetadata object.

public static BitmapMetadata ReadMetadata(string sourceFile)
{
    BitmapMetadata sourceMetadata = null;
    BitmapCreateOptions createOptions = BitmapCreateOptions.PreservePixelFormat
                                                             | BitmapCreateOptions.IgnoreColorProfile;

    // Open the File
    using (Stream sourceStream = File.Open(sourceFile, FileMode.Open, FileAccess.Read))
    {
        // Decode the file and cache the content onload (BitmapCacheOption.OnLoad)
        // If you don't do this sourceMetadata won't be fully loaded
        BitmapDecoder sourceDecoder = BitmapDecoder.Create(sourceStream,
                                                             createOptions,
                                                             BitmapCacheOption.OnLoad);

        // Check source has valid frames
        if (sourceDecoder.Frames[0] != null && sourceDecoder.Frames[0].Metadata != null)
        {
            // Clone the metadata so we can throw away the reference to the underlying file
            sourceMetadata = sourceDecoder.Frames[0].Metadata.Clone() as BitmapMetadata;
        }
        else
        {
            throw new Exception("Unable to read Metadata from File");
        }
    }

    return sourceMetadata;
}

It’s a static method so you get an in-memory copy of all the metadata. If you plan to change the return type to a specific property, then you can change BitmapCacheOption to None. This is faster, because the everything is loaded on the demand but it means BitmapMetadata is only valid whilst the sourceStream is in scope.

In my next blog I’ll talk about how to save changes made to the BitmapMetadata object we’ve retrieved.


Posted: Tue, 3 Nov 2009, 07:37:33 GMT Updated: Wed, 4 Nov 2009, 05:42:15 GMT by Ben Vincent
Category: Development
Tags: Windows Imaging Component, XMP, Exif, IPTC, Fotofly


TransparentPadder TransparentPadder TransparentPadder

Tweet  Ben - Cool! A nice end to the week, my mum was waiting for me in St Louis, she kept it a secret!

(Updated: Fri, 30 Jul 2010, 23:10:30)

Alcatraz . American Express . Amusing Photos . ASP.Net MVC . Australia . Bing . Blue Angels . BMi . Breathe Magazine . British Food . British Virgin Islands . California Highway Patrol . Camping . Canada . Christmas . Christmas Tree . Cleaner Shrimp . codeplex . Cooking . Coral Sea . Diving . Dragonlance . Engagement . Exif . Expedia . Facebook . Fish Tank . Flying . Food . Fotofly . Geotagging . Golden Gate National Recreation Area . Google . Gordon Ramsay . Hotmail . IPTC . Michelin Star . Microsoft . Microsoft Giving Campaign . Monterey Bay Aquarium . Mountain Biking . Nudibranch . San Francisco . Search Engine Optimzation (SEO) . Ship Wrecks . Silverlight . Starbucks . Tassography . The Sea Nettle Jelly . TransRockies . TV Commercial . United Airlines . Usage . Windows 7 . Windows Imaging Component . Windows Live . Windows Live Calendar . Windows Live Photo Gallery . Wineries . XMP


This website, all photography & other content is Copyright © Ben Vincent. Unauthorised use of images is strictly prohibited.
Catalog Last Updated: Mon, 19 Jul 2010, 22:48:43    |   Version v4.0.3861.38195
Powered by
Fotofly Logo