/// <summary>
            /// Returns the details for the given item.
            /// </summary>
            /// <param name="key">Item key.</param>
            /// <param name="useWIC">true to use Windows Imaging Component; otherwise false.</param>
            /// <returns>An array of tuples containing item details or null if an error occurs.</returns>
            public override Utility.Tuple <ColumnType, string, object>[] GetDetails(object key, bool useWIC)
            {
                if (disposed)
                {
                    return(null);
                }

                string filename = (string)key;
                List <Utility.Tuple <ColumnType, string, object> > details = new List <Utility.Tuple <ColumnType, string, object> >();

                // Get file info
                if (File.Exists(filename))
                {
                    FileInfo info = new FileInfo(filename);
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.DateCreated, string.Empty, info.CreationTime));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.DateAccessed, string.Empty, info.LastAccessTime));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.DateModified, string.Empty, info.LastWriteTime));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.FileSize, string.Empty, info.Length));
                    // [IG_CHANGE] use string cache
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.FilePath, string.Empty, _stringCache.GetFromCache(info.DirectoryName) ?? ""));

                    // Get metadata
                    MetadataExtractor metadata = MetadataExtractor.FromFile(filename, useWIC);
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.Dimensions, string.Empty, new Size(metadata.Width, metadata.Height)));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.Resolution, string.Empty, new SizeF((float)metadata.DPIX, (float)metadata.DPIY)));
                    // [IG_CHANGE] use string cache
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.ImageDescription, string.Empty, metadata.ImageDescription == null ? "" : _stringCache.GetFromCache(metadata.ImageDescription)));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.EquipmentModel, string.Empty, metadata.EquipmentModel ?? ""));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.DateTaken, string.Empty, metadata.DateTaken));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.Artist, string.Empty, metadata.Artist ?? ""));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.Copyright, string.Empty, metadata.Copyright ?? ""));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.ExposureTime, string.Empty, (float)metadata.ExposureTime));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.FNumber, string.Empty, (float)metadata.FNumber));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.ISOSpeed, string.Empty, (ushort)metadata.ISOSpeed));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.UserComment, string.Empty, metadata.Comment ?? ""));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.Rating, string.Empty, (ushort)metadata.Rating));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.Software, string.Empty, metadata.Software ?? ""));
                    details.Add(new Utility.Tuple <ColumnType, string, object>(ColumnType.FocalLength, string.Empty, (float)metadata.FocalLength));
                }

                return(details.ToArray());
            }
 /// <summary>
 /// Creates an instance of the MetadataExtractor class.
 /// Reads metadata via WIC/WPF (.NET 3.0).
 /// If WIC lacks a metadata reader for this image type then fall back to .NET 2.0 method.
 /// </summary>
 /// <param name="path">Filepath of image</param>
 public static MetadataExtractor FromFile(string path)
 {
     return(MetadataExtractor.FromFile(path, true));
 }