language-agnostic - 实现游程编码

标签 language-agnostic compression run-length-encoding

我编写了一个程序来执行运行长度编码。 在典型情况下,如果文本是

AAAAAABBCDEEEEGGHJ

运行长度编码会成功

A6B2C1D1E4G2H1J1

但它为每个非重复字符添加了额外的 1。因为我用它压缩 BMP 文件,所以我想到了放置一个标记“$”来表示重复字符的出现(假设图像文件有大量的重复文本)。

看起来像

$A6$B2CD$E4$G2HJ

对于当前示例,它的长度是相同的,但对于 BMP 文件有显着差异。现在我的问题在于解码。碰巧一些 BMP 文件具有模式 $<char><num>$I9在原始文件中,所以在压缩文件中我也会包含相同的文本。 $I9 ,但是在解码后它会将其视为重复的 I 重复 9 次!所以它会产生错误的输出。我想知道的是我可以使用哪个符号来标记重复字符(运行)的开始,这样它就不会与原始来源冲突。

最佳答案

为什么不把原文件中的每个$编码成压缩文件中的$$

和/或使用其他字符代替 $ - 在 bmp 文件中使用不多的字符。

另请注意,BMP 格式具有“内置”RLE 压缩 - 看 here ,靠近页面底部 - 在“图像数据和压缩”下。

我不知道你的程序是用来做什么的,或者只是为了学习,但是如果你使用“官方”的bmp方法,你的压缩图像在查看之前不需要解压缩。

关于language-agnostic - 实现游程编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685070/

相关文章:

javascript - 压缩 webpack 插件

Java - 在没有质量损失的情况下压缩图像

linux - 快速将目录转换为文件

matlab - 以独特的方式平铺向量 MATLAB

language-agnostic - Turbo Pascal 的 BNF/EBNF(最好是 5.5 或更高版本,因为 OOP)?

python - 是否有类似 "iterate iterable if it has elements, else ..."的结构?

regex - 所有正则表达式的共同特征?

language-agnostic - 是否有类似于 "upsert"的用于选择或插入的编程术语?

java - 模式游程编码

MATLAB 基于长度向量的重复数