使用 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
我正在尝试使用 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