Java使用数组2D到1D压缩图像?

Java使用数组2D到1D压缩图像?,java,arrays,image,compression,run-length-encoding,Java,Arrays,Image,Compression,Run Length Encoding,我的一项任务给我带来了麻烦。我有一个类可以读取PGM图像文件。 我需要创建几个类,主要是一个压缩类。我需要将PGM(由2D数组表示)压缩为一维数组 以下是说明: public static short[] compress(short[][]) 传递一个表示图像的二维短片数组 将压缩后的图像作为1D短数组返回 我主要关心的是那种方法 压缩理念: 查找类似像素值的水平或垂直运行,并记录运行的次数 像素值重复出现 Spektre注释:这被称为RLE运行长度编码,例如PCX使用 算法: 1

我的一项任务给我带来了麻烦。我有一个类可以读取PGM图像文件。 我需要创建几个类,主要是一个压缩类。我需要将PGM(由2D数组表示)压缩为一维数组

以下是说明:

public static short[] compress(short[][]) 
  • 传递一个表示图像的二维短片数组
  • 将压缩后的图像作为1D短数组返回
  • 我主要关心的是那种方法
压缩理念:

  • 查找类似像素值的水平或垂直运行,并记录运行的次数 像素值重复出现
  • Spektre注释:这被称为RLE运行长度编码,例如PCX使用
算法:

1.使用水平运行计算压缩图像阵列

2.使用垂直运行计算压缩图像阵列

3.选择压缩图像使用此特定图像的最佳技术

4.设置图像的标题

  • 将short[]结果数组的第一个和第二个值设置为宽度和高度值
  • 将short[]结果数组中的第三个值设置为1(水平压缩)或2(垂直压缩)
5.设置图像主体

  • short[]结果数组的其余部分用RLE数量和值填充
还有一些其他的方法

  • 如果有人想帮助他们:

    public static void write(short[], String) 
    
  • 将传递一个表示压缩图像和所需文件名的1D短片数组

  • public static short[] read(String) 
    
  • 只需将值写入一个文本文件,并在文件名中添加.compressed扩展名

    public static short[] read(String) 
    
  • 传递一个压缩图像文件名

  • public static short[] read(String) 
    
  • 只需读取值并以1D数组的形式返回它们

    public static short[][] decompress(short[]) 
    
  • 传递一个表示压缩图像的1D短片数组

  • 只需解压缩文件,我们就可以在屏幕上显示它
  • 使用我们已有的showGrayImage()代码

提前谢谢

编辑了你的问题,如果我没有弄坏什么东西,请检查一下。RLE是很容易做到的,所以它是一个很好的选择为您。。。还有许多其他使用DCT、IDCT或可变位长的压缩算法,但对于初学者来说,编码有点复杂。此外,我还删除了你的PGM标签(这对你来说没有太大帮助,无法为另一个标签让位),并添加了新的标签RLE(奇怪的是,像RLE这样的基本therm标签还没有在这里创建,所以在有人批准之前它是不可见的)。你可以在谷歌上搜索一些PCX解码/编码源以获得更好的起点。。。开始自己编写代码,当遇到问题时,通过添加一些源代码(在代码块内或在每个代码行前添加4、8或12个空格)和/或添加具体问题来编辑问题。(不要误会,这只是这里的工作方式,所以)我只是太迷茫了。。。叹气我希望我能得到一些实时帮助。看这里,但我不确定你是否能在同行批准之前看到该页面。首先开始编写compress(),不进行压缩(跳过步骤1、2、3),然后不解压缩就解压缩(),这样你就可以调用compress,然后解压缩并在某处查看输出图像。(对于循环和数据复制,这两个函数都只是2个嵌套函数)当您完成此操作时,请尝试开始实现压缩。对于初学者,只尝试行压缩(我认为是水平运行)。当你完成它的时候,剩下的都会来找你。。。