BitMiracle.LibTiff.Classic.Tiff.fetchData C# (CSharp) Method

fetchData() private method

Fetches a contiguous directory item.
private fetchData ( TiffDirEntry dir, byte buffer ) : int
dir TiffDirEntry
buffer byte
return int
        private int fetchData(TiffDirEntry dir, byte[] buffer)
        {
            int width = DataWidth(dir.tdir_type);
            int count = (int)dir.tdir_count * width;

            // Check for overflow.
            if (dir.tdir_count == 0 || width == 0 || (count / width) != dir.tdir_count)
                fetchFailed(dir);

            if (!seekOK(dir.tdir_offset))
                fetchFailed(dir);

            if (!readOK(buffer, count))
                fetchFailed(dir);

            if ((m_flags & TiffFlags.SWAB) == TiffFlags.SWAB)
            {
                switch (dir.tdir_type)
                {
                    case TiffType.SHORT:
                    case TiffType.SSHORT:
                        short[] s = ByteArrayToShorts(buffer, 0, count);
                        SwabArrayOfShort(s, dir.tdir_count);
                        ShortsToByteArray(s, 0, dir.tdir_count, buffer, 0);
                        break;

                    case TiffType.LONG:
                    case TiffType.SLONG:
                    case TiffType.FLOAT:
                    case TiffType.IFD:
                        int[] l = ByteArrayToInts(buffer, 0, count);
                        SwabArrayOfLong(l, dir.tdir_count);
                        IntsToByteArray(l, 0, dir.tdir_count, buffer, 0);
                        break;

                    case TiffType.RATIONAL:
                    case TiffType.SRATIONAL:
                        int[] r = ByteArrayToInts(buffer, 0, count);
                        SwabArrayOfLong(r, 2 * dir.tdir_count);
                        IntsToByteArray(r, 0, 2 * dir.tdir_count, buffer, 0);
                        break;

                    case TiffType.DOUBLE:
                        swab64BitData(buffer, 0, count);
                        break;
                }
            }

            return count;
        }
Tiff