我使用jpeg压缩获得了多重tiff。
通过libtiff.net打开文件时出现以下错误消息:
JPEGPreDecode:
JPEG strip/tile size exceeds expected dimensions, expected 1164x1, got 1164x826.
图像处理失败。 文件/目录有这个标签:
OldSubFileType (1 Short): 1
ImageWidth (1 Long): 1164
ImageLength (1 Long): 826
BitsPerSample (3 Short): 8, 8, 8
Compression (1 Short): JPEG Technote #2
Photometric (1 Short): YCbCr
FillOrder (1 Short): Msb2Lsb
StripOffsets (1 Long): 224
SamplesPerPixel (1 Short): 3
StripByteCounts (1 Long): 109294
XResolution (1 Rational): 200
YResolution (1 Rational): 200
PlanarConfig (1 Short): Contig
使用其他jpeg压缩文件我没有问题。 有什么想法我得到错误?为什么期望1164x1?
答案 0 :(得分:0)
请确保您的文件设置了ROWSPERSTRIP标记。
如果没有设置此标记,JPEG解码器可能会认为图像中条带的高度不正确。
其他选项是下载source code of LibTiff.Net,在JpgeCodec.cs的JPEGPreDecode
方法的开头设置断点,看看出了什么问题。最有可能的是,该方法的以下部分导致编解码器的警告和行为不端:
if (segment_height > td.td_rowsperstrip)
segment_height = td.td_rowsperstrip;
您可能会更改方法的这一部分,但最好修改文件。
您也可以尝试自己添加标记(请注意,您需要为每个目录设置标记)。打开图像,检查标签的存在,并尝试使用“SetField”方法为标签设置正确的值。
using (Tiff image = Tiff.Open(existingTiffName, "a"))
{
for (int i = 0; i < image.NumberOfDirectories(); i++)
{
image.SetDirectory(i);
...
FieldValue[] value = image.GetField(TiffTag.ROWSPERSTRIP);
if (value == null)
{
// ROWSPERSTRIP is not set
image.SetField(TiffTag.ROWSPERSTRIP, heightOfTheImage);
}
...
}
}
请注意,您应该打开更多附加图片(请使用"a"
参数)。