lzw压缩jpg。。。求救

stardust20 2010-01-02 02:39:39
求救参照书本写了个lzw压缩解压的程序,也上网看了好多资料,现在可以实现用lzw压缩解压500多k的汉字文件不会出错,但是用它去压缩再解压一个jpg图片(4k)显示出来就不像原来的那样。。。这大概是什么原因啊。。有没办法改正。。。先谢谢大家了
...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
stardust20 2010-01-02
  • 打赏
  • 举报
回复
哈哈。。成功了。。。谢谢大家。。特别谢谢jx8904020853和cattycat
macrojj 2010-01-02
  • 打赏
  • 举报
回复
代码上写的啊
;if(pcode==0||c==0)
stardust20 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cattycat 的回复:]
对,就是0的问题。如果你是参考 算法与数据结构C++实现 书上的话,在代码中加上下面的对0的处理。
C/C++ codeif(!in.eof())
{do {in.get(c);if(in.eof())break;
unsignedlong k=(pcode<<ByteSize)+c;if(pcode==0||c==0)////这里是书上没有的,得加上对0的处理 {
Output(pcode);
pcode=c;
}elseif(h.Search(k,e))pcode=e.code;else
{
Output(pcode);if(used<codes)
{
e.code=used++;
e.key=(pcode<<ByteSize)|c;
h.Insert(e);
}
pcode=c;
}
}while(true);

Output(pcode);if(status){ c=LeftOver<<excess;out.put(c);}
}
解压缩的也需要对0进行处理。
[/Quote]
嗯。。。是参照那本书。。。解压缩时怎么对0进行处理?能说下吗?谢谢
beginnow 2010-01-02
  • 打赏
  • 举报
回复
因为图片错误很容易看出来,你确认汉字没有问题吗? 如果确实没有问题,你用一个文件比较器比较原始的jpg图片和压缩解压出来的图片,看一下是那一个数据出问题了,然后再反过来调试一下,就可以定位了
cattycat 2010-01-02
  • 打赏
  • 举报
回复
对,就是0的问题。如果你是参考 算法与数据结构C++实现 书上的话,在代码中加上下面的对0的处理。
if(!in.eof())
{
do {
in.get(c);
if(in.eof())break;
unsigned long k=(pcode<<ByteSize)+c;
if(pcode==0||c==0)////这里是书上没有的,得加上对0的处理
{
Output(pcode);
pcode=c;
}
else if(h.Search(k,e))pcode=e.code;
else
{
Output(pcode);
if(used<codes)
{
e.code=used++;
e.key=(pcode<<ByteSize)|c;
h.Insert(e);
}
pcode=c;
}
} while(true);

Output(pcode);
if(status){ c=LeftOver<<excess; out.put(c);}
}

解压缩的也需要对0进行处理。
jx8904020853 2010-01-02
  • 打赏
  • 举报
回复
你是没处理好0!文字压缩不需要考虑0,二进制却需要
呵呵
lori227 2010-01-02
  • 打赏
  • 举报
回复
没弄过..帮顶下~!
stardust20 2010-01-02
  • 打赏
  • 举报
回复
是因为我编码的问题吗?还是算法上有错?之前实现0阶自适应和huffman时压txt和其它东西好像都是一样的思想的。。。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧