我的任务有问题。我有一个读取 PGM 图像文件的类。我需要创建几个类,主要的是一个压缩类。我需要将 PGM(由二维数组表示)压缩成一维数组。
以下是说明:
public static short[] compress(short[][])
- 传递一个代表图像的 2D 短裤数组。
- 将压缩图像作为 1D 短裤数组返回。
- 这种方法是我主要关心的。
压缩思路:
- 寻找相似像素值的水平或垂直运行,并记录像素值自身重复的次数。
- Spektre 的注释:这称为PCX 使用的RLE 运行长度编码,例如
算法:
1.使用水平运行计算压缩图像数组
2.使用垂直运行计算压缩图像数组
3.选择压缩图像使用此特定图像的最佳技术。
4.设置图片的标题
- 将 short [ ] 结果数组的第一个和第二个值设置为宽度和高度值。
- 将 short[ ] 结果数组中的第三个值设置为 1 用于水平压缩或 2 用于垂直压缩。
5.设置图片主体
- 剩下的 short [ ] 结果数组用 RLE 数量和值填充
还有一些其他的方法
如果有人想帮助他们:
public static void write(short[], String)
传递一个代表压缩图像和所需文件名的 1D 短裤数组。
只需将值写入文本文件,并在文件名中添加 .compressed 扩展名。
public static short[] read(String)
传递一个压缩的图像文件名。
只需读取值并以一维短裤数组形式返回它们。
public static short[][] decompress(short[])
传递一个代表压缩图像的一维短裤数组。
- 只需解压缩文件,以便我们可以将其显示在屏幕上
- 使用我们已有的 showGrayImage() 代码。
提前致谢!