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

时间:2018-11-26 10:50:30

标签: c# bitmap libtiff libtiff.net

我正在尝试使用Libtiff.net将颜色索引的位图保存到Tiff。 但是它抛出一个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 :(得分:1)

我找到了解决方法。

首先,您必须定义

Responder

TiffTag.COLORMAP Tiff.SetField 函数使用此函数来计算数组长度,而不是依赖于C#length属性。

请参阅第231行 TiffTagMethods