Сохранение индексированного Tiff с использованием LibTiff.net создает исключение - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь сохранить растровое изображение с индексом в Tiff, используя Libtiff.net.Но он выдает OutOfRangeException: Exception

Исключение происходит, если я установил и проиндексировал карту цветов:

       internal static bool SaveColorPalette(Bitmap source, Tiff destTiff, int bitsPerSample)
    {
        destTiff.SetField(TiffTag.PHOTOMETRIC, Photometric.PALETTE);
        var paletteSize = 1 << bitsPerSample;
        var palette = source.Palette.Entries;
        var reds = new short[paletteSize];
        var greens = new short[paletteSize];
        var blues = new short[paletteSize];
        for (var i = 0; i < palette.Length && i < paletteSize; ++i)
        {
            var color = palette[i];
            reds[i] = color.R;
            greens[i] = color.G;
            blues[i] = color.B;
        }

        destTiff.SetField(TiffTag.COLORMAP, reds, greens, blues);
        return true;
    }

У кого-нибудь есть идеи, что может вызвать это?

Спасибо.

Редактировать: Исключение возникает, когда я сохраняю Tiff с

outputTiff.WriteDirectory();

1 Ответ

0 голосов
/ 26 ноября 2018

Я нашел решение.

Сначала вы должны определить

TiffTag.BITSPERSAMPLE

Tiff.SetField для TiffTag.COLORMAP используйте это для вычисления длины массива, вместо того чтобы полагаться на свойство длины C #.

См. строку 231 в TiffTagMethods

...