Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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());
        }