首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TIFF CCITT Group 4解压缩(T.6)的算法问题

TIFF CCITT Group 4解压缩(T.6)的算法问题
EN

Stack Overflow用户
提问于 2014-07-20 02:00:16
回答 2查看 1.3K关注 0票数 1

我在一家工程设计公司工作,我们以TIFF格式存储黑白设计图,用CCITT Group 4压缩。

我正在从事一个项目,以改善我们的软件与这些图纸的工作。显然,我需要能够将原始数据加载到我的程序中,所以我必须对其进行解压缩。

我试过使用LibTiff,但很快就放弃了。它不会构建,生成了超过2000个错误。我在库中发现了许多明显的语法错误,并得出结论说它是垃圾。我花了大约3个小时试图找到实现CCITT Group 4编解码器的库的一部分,但没有运气,代码是一堆令人费解的东西。

因此,我正在为该程序编写自己的编解码器。我让它基本上工作得很好,但我被一个问题卡住了。我找不到关于这种格式的好文档。有很多很好的概述,大致描述了2D修改后的Huffman压缩是如何工作的,但我找不到任何具体的,实现级别的细节。因此,我试图通过使用一些绘图文件作为示例来解决这个问题。

我的垂直模式和pass模式工作得很好,并且我的算法可以在图像进入向导并产生垃圾之前正确地解压缩大约三分之一的图像。

我将问题追溯到水平模式。我的水平模式算法期望看到水平模式代码001,然后是一组补充代码(可选)和当前笔颜色的终止代码,然后是另一组补充代码(可选)和相反颜色的终止代码。

这个算法在图像的三分之一处工作得很好,但突然我遇到了一个水平模式运行,其中相反的颜色出现在当前笔的颜色之前。

图像的这一部分是12个黑色像素的游程,后面是22个白像素的游程。

该部分的码位是00100000110000111,它解码为水平(001) 22白色(0000011) 12黑色(0000111 ),如您所见,这与像素在图像中出现的顺序相反。

因为我的算法需要图像顺序列表,所以它崩溃了。但同一图像文件中之前的307个水平模式实例都是按图像顺序排列的。到目前为止,这是我找到的唯一一个反向的。

其他图像处理程序可以很好地显示此文件。我尝试手动编辑图像文件中的位,只是为了测试图像的顺序,这会导致其他图像程序在解码图像时崩溃。这让我相信他们有某种方法可以知道在这种情况下情况是相反的。

有谁知道这个TIFF CCITT G4编码的具体实现层细节,它可以帮助我理解运行代码有时是如何以及为什么被颠倒的?

谢谢Josh

EN

回答 2

Stack Overflow用户

发布于 2014-07-20 05:49:44

CCITT G4水平码始终编码为一对(黑/白)或(白/黑)。它取决于当前的画笔颜色。垂直代码将翻转颜色,但水平代码将保持颜色不变。如果当前的笔颜色是黑色,则解码白色水平代码,然后解码黑色。如果当前钢笔颜色为白色,则将执行相反的操作。

票数 1
EN

Stack Overflow用户

发布于 2019-04-19 03:25:11

代码: 00100000110000111

001 :水平模式

0000011000 :黑色RunLength 17

0111 :白色RunLength 2

它首先是黑色的。

运行代码不反转。

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

https://stackoverflow.com/questions/24843378

复制
相关文章

相似问题

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