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)); } }
public IFDEntry(Tag t, FieldType ft, int c, IFDRational d) : this(t, ft, c, new IFDRational[] { d }) { }