Logo Search packages:      
Sourcecode: f-spot version File versions

X3fFile.cs

using System;
using System.IO;
using FSpot;
using SemWeb;

namespace FSpot.X3f {
      internal class Info {
            ushort major_version;
            ushort minor_version;
            byte [] uid;
            uint mark_bits;
            uint cols;
            uint rows;
            uint rotation;

            public PixbufOrientation Orientation {
                  get {
                        switch (rotation) {
                        case 0:
                              return PixbufOrientation.TopLeft;
                        case 270:
                              return PixbufOrientation.LeftBottom;
                        case 180:
                              return PixbufOrientation.BottomRight;
                        case 90:
                              return PixbufOrientation.RightTop;
                        default:
                              return PixbufOrientation.TopLeft;
                        }
                  }
            }

            public uint Width {
                  get { return cols; }
            }
            
            public uint Height {
                  get { return rows; }
            }

            public Info (Stream stream)
            {
                  byte [] buffer = new byte [4];
                  stream.Read (buffer, 0, buffer.Length);
                  if (System.Text.Encoding.ASCII.GetString (buffer, 0, buffer.Length) != "FOVb")
                        throw new ImageFormatException ("invalid Foveon magic number");
                  
                  stream.Read (buffer, 0, buffer.Length);
                  major_version = BitConverter.ToUInt16 (buffer, 0, true);
                  minor_version = BitConverter.ToUInt16 (buffer, 2, true);

                  uid = new byte [16];
                  stream.Read (uid, 0, uid.Length);

                  stream.Read (buffer, 0, buffer.Length);
                  mark_bits = BitConverter.ToUInt32 (buffer, 0, true);
                  stream.Read (buffer, 0, buffer.Length);
                  cols = BitConverter.ToUInt32 (buffer, 0, true);
                  stream.Read (buffer, 0, buffer.Length);
                  rows = BitConverter.ToUInt32 (buffer, 0, true);
                  stream.Read (buffer, 0, buffer.Length);
                  rotation = BitConverter.ToUInt32 (buffer, 0, true);
            }

            public override string ToString ()
            {
                  return String.Format ("x3file ({0}.{1}, mark_bits={2}) ({3}, {4})",
                                    major_version, minor_version,
                                    mark_bits, Width, Height);
            }

      }

      public class X3fFile : DCRawFile, SemWeb.StatementSource {
            Info info;

                // false seems a safe default
                public bool Distinct {
                        get { return false; }
                }

            internal Info Info {
                  get {
                        if (info == null)
                              info = new Info (Open ());

                        return info;
                  }
            }

            public X3fFile (string path) : base (path)
            {
            }

            public X3fFile (System.Uri uri) : base (uri)
            {
            }
            
            public void Select (StatementSink sink)
            {
                  MetadataStore.AddLiteral (sink, "tiff:Orientation", ((int)Info.Orientation).ToString ());
                  MetadataStore.AddLiteral (sink, "tiff:ImageWidth", Info.Width.ToString ());
                  MetadataStore.AddLiteral (sink, "tiff:ImageLength", Info.Height.ToString ());
            }

            public override PixbufOrientation GetOrientation ()
            {
                  return Info.Orientation;
            }

      }
}

Generated by  Doxygen 1.6.0   Back to index