找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 1328|回复: 10

[【其它】] 蛋疼CX

[复制链接]
发表于 2011-8-26 11:02:40 | 显示全部楼层 |阅读模式
不吐不快。

CX真蛋疼,用个ccitt,结果搞得g3不是g3,g4不是g4

更蛋疼的是擅自做主,取消runlength超过1728的makeup的使用。。。。。影响压缩率

最最蛋疼的是作为压缩算法居然强制要求结果长度满足1024倍数,好为之后的pdg加密提供方便。。。。。继续影响压缩率

真没搞懂,他目的究竟是啥。。。。

经过批量文件测试,山寨ccitt编码器编码结100%与蛋疼CX输出相同
回复

使用道具 举报

发表于 2011-8-26 11:58:30 | 显示全部楼层
说明这是自主创新,有自己的知识产权,

国内自主创新的典范,和高铁一样,统统都是“自主的知识产权”
回复

使用道具 举报

发表于 2011-8-26 14:27:42 | 显示全部楼层
回复

使用道具 举报

发表于 2011-8-26 15:23:57 | 显示全部楼层
有1728限制,其他的没发现。
回复

使用道具 举报

 楼主| 发表于 2011-8-26 21:05:23 | 显示全部楼层
你可以测试下官方编码器产生的CCITT pdg,看看datasize是不是都是1024的倍数。。。。。。
回复

使用道具 举报

发表于 2011-8-26 23:50:19 | 显示全部楼层
不要对人家苛求太多,这样的事情太多了,照着人家发明的算法写就行。
short CG4Base::encode_black_code (short runlength)
{
  short remaining;
  const int nlength = 0x40;
  if (runlength < nlength)
  {
    encode_word (term_black_codes [runlength], term_black_lengths [runlength]);
    return (0);
  }
  else if (runlength < 0x6C0u)
  {
    short x;
    x = (runlength - nlength) / nlength;
    encode_word (makeup_black_codes [x], makeup_black_lengths [x]);
    remaining = runlength - (nlength * (1 + x));
    if (!remaining) encode_word (term_black_codes [0], term_black_lengths [0]);
    return (remaining);
  }
  else
  {
    encode_word (makeup_black_codes [26], makeup_black_lengths [26]);
    encode_black_code (runlength - 0x6C0u);
  }
}

short CG4Base::encode_white_code (short runlength)
{
  short remaining;
  const int nlength = 0x40;
  if (runlength < nlength)
  {
    encode_word (term_white_codes [runlength], term_white_lengths [runlength]);
    return (0);
  }
  else if (runlength < 0x6C0u)
  {
    short x;
    x = (runlength - nlength) / nlength;
    encode_word (makeup_white_codes [x], makeup_white_lengths [x]);
    remaining = runlength - (nlength * (1 + x));
    if (!remaining) encode_word (term_white_codes [0], term_white_lengths [0]);
    return (remaining);
  }
  else
  {
    encode_word (makeup_white_codes [26], makeup_white_lengths [26]);
    encode_white_code (runlength - 0x6C0u);
  }
}
回复

使用道具 举报

发表于 2011-8-27 00:28:30 | 显示全部楼层
人家的这个算法发明,对于影响压缩率的高低是否明显是值得讨论的,呵呵。
回复

使用道具 举报

 楼主| 发表于 2011-8-27 00:39:03 | 显示全部楼层
  不信你将pdg的ccitt解码后,用原版g4编码,压缩率不高才怪。

按照cx的编码逻辑
pdg -> bmp -> pdg

这么循环,pdg的width必然依次增长。。。(文件长度依次递增, 估计是压根就没考虑还需要从pdg转成图片在转回去)
原因是他独创的在bmp->pdg的过程中修改了width。。。。 pdg中ccitt的width mod 32 == 2

Width(pdg) =(32*((Width(bmp)+31)/32)) & 0xFFF8 + 2
回复

使用道具 举报

发表于 2011-8-27 08:39:49 | 显示全部楼层
云山雾罩,一头雾水
回复

使用道具 举报

发表于 2011-8-27 12:24:10 | 显示全部楼层
1728问题和1024补齐(没发现有)能够影响压缩率高低的力度是很小的,真正能够严重影响压缩率高低的因素在于黑块白块的交替处理上,仔细比较这块算法和标准的G4算法就可以得出结论了,具体就不说了,还是给人家程序员留点颜面吧,程序员也是要吃饭的。
回复

使用道具 举报

发表于 2011-8-28 06:54:25 | 显示全部楼层
晕,一点没看懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-9-28 23:28 , Processed in 0.137785 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表