示例#1
0
        private IFDEntry CreateIFDEntry(BinaryReader br, IFDEntry.Tag tag,
                                        IFDEntry.FieldType ft, int count)
        {
            switch (ft)
            {
            case IFDEntry.FieldType.ASCII:
            case IFDEntry.FieldType.BYTE:
            case IFDEntry.FieldType.SBYTE:
            case IFDEntry.FieldType.UNDEFINED:
                var b = br.ReadBytes(count);
                return(new IFDEntry(tag, ft, count, b));

            case IFDEntry.FieldType.SHORT: {
                var s = new ushort[count];
                for (int i = 0; i < count; ++i)
                {
                    s[i] = ReadUInt16(br);
                }
                return(new IFDEntry(tag, ft, count, s));
            }

            case IFDEntry.FieldType.SSHORT: {
                var s = new short[count];
                for (int i = 0; i < count; ++i)
                {
                    s[i] = ReadInt16(br);
                }
                return(new IFDEntry(tag, ft, count, s));
            }

            case IFDEntry.FieldType.FLOAT:
                var f = new float[count];
                for (int i = 0; i < count; ++i)
                {
                    f[i] = ReadSingle(br);
                }
                return(new IFDEntry(tag, ft, count, f));

            case IFDEntry.FieldType.LONG: {
                var l = new uint[count];
                for (int i = 0; i < count; ++i)
                {
                    l[i] = ReadUInt32(br);
                }
                return(new IFDEntry(tag, ft, count, l));
            }

            case IFDEntry.FieldType.SLONG: {
                var l = new int[count];
                for (int i = 0; i < count; ++i)
                {
                    l[i] = ReadInt32(br);
                }
                return(new IFDEntry(tag, ft, count, l));
            }

            case IFDEntry.FieldType.DOUBLE:
                var d = new double[count];
                for (int i = 0; i < count; ++i)
                {
                    d[i] = ReadDouble(br);
                }
                return(new IFDEntry(tag, ft, count, d));

            case IFDEntry.FieldType.RATIONAL:
            case IFDEntry.FieldType.SRATIONAL:
                var r = new IFDRational[count];
                for (int i = 0; i < count; ++i)
                {
                    int numer = ReadInt32(br);
                    int denom = ReadInt32(br);
                    r[i] = new IFDRational(numer, denom);
                }
                return(new IFDEntry(tag, ft, count, r));

            case IFDEntry.FieldType.Unknown:
            default:
                return(new IFDEntry(tag, ft, count));
            }
        }
示例#2
0
 public IFDEntry(Tag t, FieldType ft, int c, IFDRational d)
     : this(t, ft, c, new IFDRational[] { d })
 {
 }