我正在尝试使用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();
答案 0 :(得分:1)
我找到了解决方法。
首先,您必须定义
Responder
TiffTag.COLORMAP 的 Tiff.SetField 函数使用此函数来计算数组长度,而不是依赖于C#length属性。
请参阅第231行 TiffTagMethods