使用 LibTiff.net 保存颜色索引的 Tiff 会抛出异常

Saving colorindexed Tiff using LibTiff.net throws exception

我正在尝试使用 Libtiff.net 将颜色索引位图保存到 Tiff。 但它会抛出 OutOfRangeException:

如果我设置和索引颜色图,则会发生异常:

       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();

我找到了解决方案。

首先你必须定义

TiffTag.BITSPERSAMPLE

Tiff.SetField函数TiffTag.COLORMAP用这个来计算数组长度,而不是依赖C# 长度 属性.

见第 231 行 TiffTagMethods