private static async Task <uint[]> ReadIntegerArrayAsync_Internal(TiffIfdEntry entry, Stream stream, ByteOrder byteOrder) { switch (entry.Type) { case TiffType.Byte: { byte[] data = await entry.ReadDataAsync(stream, byteOrder); return(Enumerable.Range(0, entry.Count).Select(index => (uint)DataConverter.ToByte(data, index)).ToArray()); } case TiffType.Short: { byte[] data = await entry.ReadDataAsync(stream, byteOrder); return(Enumerable.Range(0, entry.Count).Select(index => (uint)DataConverter.ToUInt16(data, index * 2, byteOrder)).ToArray()); } case TiffType.Long: case TiffType.Ifd: { byte[] data = await entry.ReadDataAsync(stream, byteOrder); return(Enumerable.Range(0, entry.Count).Select(index => DataConverter.ToUInt32(data, index * 4, byteOrder)).ToArray()); } default: throw new InvalidOperationException(); } }
private static async Task <double[]> ReadDoubleArrayAsync_Internal(TiffIfdEntry entry, Stream stream, ByteOrder byteOrder) { byte[] data = await entry.ReadDataAsync(stream, byteOrder); return(Enumerable.Range(0, entry.Count).Select(index => { return DataConverter.ToDouble(data, index * 8, byteOrder); }).ToArray()); }
private static async Task <SignedRational[]> ReadSignedRationalArrayAsync_Internal(TiffIfdEntry entry, Stream stream, ByteOrder byteOrder) { byte[] data = await entry.ReadDataAsync(stream, byteOrder); return(Enumerable.Range(0, entry.Count).Select(index => { var numerator = DataConverter.ToInt32(data, index * 8, byteOrder); var denominator = DataConverter.ToInt32(data, index * 8 + 4, byteOrder); return new SignedRational(numerator, denominator); }).ToArray()); }
private static async Task <string> ReadStringAsync_Internal(TiffIfdEntry entry, Stream stream, ByteOrder byteOrder) { byte[] data = await entry.ReadDataAsync(stream, byteOrder); if (data[data.Length - 1] != 0) { throw new ImageFormatException("The retrieved string is not null terminated."); } return(Encoding.ASCII.GetString(data, 0, data.Length - 1)); }
private static async Task <TiffIfdReference[]> ReadIfdReferenceArrayAsync_Internal(TiffIfdEntry entry, Stream stream, ByteOrder byteOrder) { byte[] data = await entry.ReadDataAsync(stream, byteOrder); return(Enumerable.Range(0, entry.Count).Select(index => new TiffIfdReference(DataConverter.ToUInt32(data, index * 4, byteOrder))).ToArray()); }