public void Select(SemWeb.StatementSink sink) { foreach (Entry e in entries) { EntryType type = (EntryType)e.Type; switch (type) { case EntryType.IPTCNAA: System.IO.Stream iptcstream = new System.IO.MemoryStream(e.Data); FSpot.Iptc.IptcFile iptc = new FSpot.Iptc.IptcFile(iptcstream); iptc.Select(sink); break; case EntryType.XMP: System.IO.Stream xmpstream = new System.IO.MemoryStream(e.Data); FSpot.Xmp.XmpFile xmp = new FSpot.Xmp.XmpFile(xmpstream); xmp.Select(sink); break; default: break; } } }
public void Select (SemWeb.StatementSink sink) { foreach (Entry e in entries) { EntryType type = (EntryType) e.Type; switch (type) { case EntryType.IPTCNAA: System.IO.Stream iptcstream = new System.IO.MemoryStream (e.Data); FSpot.Iptc.IptcFile iptc = new FSpot.Iptc.IptcFile (iptcstream); iptc.Select (sink); break; case EntryType.XMP: System.IO.Stream xmpstream = new System.IO.MemoryStream (e.Data); FSpot.Xmp.XmpFile xmp = new FSpot.Xmp.XmpFile (xmpstream); xmp.Select (sink); break; default: break; } } }
public void SelectDirectory (ImageDirectory dir, StatementSink sink) { foreach (DirectoryEntry e in dir.Entries) { #if DEBUG_LOADER System.Console.WriteLine ("{0}", e.Id); #endif switch (e.Id) { case TagId.IPTCNAA: System.IO.Stream iptcstream = new System.IO.MemoryStream (e.RawData); FSpot.Iptc.IptcFile iptc = new FSpot.Iptc.IptcFile (iptcstream); iptc.Select (sink); break; case TagId.PhotoshopPrivate: System.IO.Stream bimstream = new System.IO.MemoryStream (e.RawData); FSpot.Bim.BimFile bim = new FSpot.Bim.BimFile (bimstream); bim.Select (sink); break; case TagId.XMP: System.IO.Stream xmpstream = new System.IO.MemoryStream (e.RawData); FSpot.Xmp.XmpFile xmp = new FSpot.Xmp.XmpFile (xmpstream); xmp.Select (sink); break; case TagId.ImageDescription: MetadataStore.AddLiteral (sink, "dc:description", "rdf:Alt", new Literal (e.ValueAsString [0], "x-default", null)); break; case TagId.UserComment: MetadataStore.AddLiteral (sink, "exif:UserComment", "rdf:Alt", new Literal (e.ValueAsString [0], "x-default", null)); break; case TagId.Copyright: MetadataStore.AddLiteral (sink, "dc:rights", "rdf:Alt", new Literal (e.ValueAsString [0], "x-default", null)); break; case TagId.Artist: MetadataStore.Add (sink, "dc:creator", "rdf:Seq", e.ValueAsString); break; case TagId.ExifIfdPointer: try { ImageDirectory sub = ((SubdirectoryEntry)e).Directory [0]; SelectDirectory (sub, sink); } catch (System.Exception exc) { System.Console.WriteLine (exc); } break; case TagId.Software: MetadataStore.AddLiteral (sink, "xmp:CreatorTool", e.ValueAsString [0]); break; case TagId.DateTime: try { MetadataStore.AddLiteral (sink, "xmp:ModifyDate", e.ValueAsDate.ToString ("yyyy-MM-ddThh:mm:ss")); } catch (System.Exception ex) { System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine)); } break; case TagId.DateTimeOriginal: case TagId.DateTimeDigitized: // FIXME subsectime needs to be included in these values // FIXME shouldn't DateTimeOriginal be xmp:CreateDate? the spec says no but wtf? try { MetadataStore.AddLiteral (sink, "exif:" + e.Id.ToString (), e.ValueAsDate.ToString ("yyyy-MM-ddThh:mm:ss")); } catch (System.Exception ex) { System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine)); } break; //case TagId.SpatialFrequencyResponse case TagId.ExifCFAPattern: CFAPattern pattern = new CFAPattern (e.RawData, e.IsLittle); Entity empty = new BNode (); Statement top = new Statement (MetadataStore.FSpotXMPBase, (Entity)MetadataStore.Namespaces.Resolve ("exif:" + e.Id.ToString ()), empty); Statement cols = new Statement (empty, (Entity) MetadataStore.Namespaces.Resolve ("exif:Columns"), new Literal (pattern.Columns.ToString (), null, null)); sink.Add (cols); Statement rows = new Statement (empty, (Entity) MetadataStore.Namespaces.Resolve ("exif:Rows"), new Literal (pattern.Rows.ToString (), null, null)); sink.Add (rows); string [] vals = e.ArrayToString (pattern.Values); MetadataStore.Add (sink, empty, "exif:Values", "rdf:Seq", vals); sink.Add (top); break; case TagId.ExifVersion: case TagId.FlashPixVersion: case TagId.ColorSpace: case TagId.CompressedBitsPerPixel: case TagId.PixelYDimension: case TagId.PixelXDimension: case TagId.RelatedSoundFile: case TagId.ExposureTime: case TagId.FNumber: case TagId.ExposureProgram: case TagId.SpectralSensitivity: case TagId.ShutterSpeedValue: case TagId.ApertureValue: case TagId.BrightnessValue: case TagId.ExposureBiasValue: case TagId.MaxApertureValue: case TagId.SubjectDistance: case TagId.MeteringMode: case TagId.LightSource: case TagId.FocalLength: case TagId.FlashEnergy: case TagId.FocalPlaneXResolution: case TagId.FocalPlaneYResolution: case TagId.FocalPlaneResolutionUnit: case TagId.ExposureIndex: case TagId.SensingMethod: case TagId.FileSource: case TagId.SceneType: case TagId.CustomRendered: case TagId.ExposureMode: case TagId.WhiteBalance: case TagId.DigitalZoomRatio: case TagId.FocalLengthIn35mmFilm: case TagId.SceneCaptureType: case TagId.GainControl: case TagId.Contrast: case TagId.Saturation: case TagId.Sharpness: MetadataStore.AddLiteral (sink, "exif:" + e.Id.ToString (), e.ValueAsString [0]); break; case TagId.ComponentsConfiguration: case TagId.ISOSpeedRatings: case TagId.SubjectArea: case TagId.SubjectLocation: MetadataStore.Add (sink, "exif:" + e.Id.ToString (), "rdf:Seq", e.ValueAsString); break; case TagId.TransferFunction: case TagId.YCbCrSubSampling: case TagId.WhitePoint: case TagId.PrimaryChromaticities: case TagId.YCbCrCoefficients: case TagId.ReferenceBlackWhite: case TagId.BitsPerSample: MetadataStore.Add (sink, "tiff:" + e.Id.ToString (), "rdf:Seq", e.ValueAsString); break; case TagId.Orientation: case TagId.Compression: case TagId.PhotometricInterpretation: case TagId.SamplesPerPixel: case TagId.PlanarConfiguration: case TagId.YCbCrPositioning: case TagId.ResolutionUnit: case TagId.ImageWidth: case TagId.ImageLength: case TagId.Model: case TagId.Make: MetadataStore.AddLiteral (sink, "tiff:" + e.Id.ToString (), e.ValueAsString [0]); break; } } }