首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libtiff.net无法读取jpeg压缩文件

libtiff.net无法读取jpeg压缩文件
EN

Stack Overflow用户
提问于 2012-11-20 23:31:35
回答 1查看 1.3K关注 0票数 1

我有一个使用jpeg压缩的多页tiff。

通过libtiff.net打开文件时,我收到以下错误消息:

代码语言:javascript
复制
JPEGPreDecode: 
JPEG strip/tile size exceeds expected dimensions, expected 1164x1, got 1164x826.

图像处理失败。文件/目录具有以下标记:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-25 03:12:47

请确保您的文件设置了ROWSPERSTRIP标签。

如果不设置此标记,JPEG解码器可能会认为图像中条带的高度不正确。

另一种选择是下载source code of LibTiff.Net,在JpgeCodec.cs中的JPEGPreDecode方法的开头设置断点,看看哪里出了问题。最有可能的是,该方法的以下部分导致了编解码器的警告和行为异常:

代码语言:javascript
复制
if (segment_height > td.td_rowsperstrip)
    segment_height = td.td_rowsperstrip;

您可以更改该方法的这一部分,但更好的做法可能是修复文件。

您也可以尝试自己添加标签(请注意,您需要为每个目录设置标签)。打开图像,检查标签的存在,并尝试使用'SetField‘方法为标签设置正确的值。

代码语言:javascript
复制
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);
        }
        ...
    }
}

请注意,您应该在append more中打开图像(为此使用"a"参数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13476554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档