課題で困っています。PGM イメージ ファイルを読み込むクラスがあります。いくつかのクラスを作成する必要があります。主なクラスは圧縮クラスです。PGM (2D 配列で表される) を 1D 配列に圧縮する必要があります。
手順は次のとおりです。
public static short[] compress(short[][])
- 画像を表す short の 2D 配列が渡されます。
- 圧縮されたイメージを short の 1D 配列として返します。
- その方法は私の主な関心事です。
圧縮のアイデア:
- 同様のピクセル値の水平方向または垂直方向のランを探し、ピクセル値が繰り返された回数を記録します。
- Spektre によるメモ: これはRLE ランレングス エンコーディングと呼ばれ、たとえば PCX で使用されます 。
アルゴリズム:
1.水平ランを使用して圧縮画像配列を計算します
2.垂直ランを使用して圧縮画像配列を計算する
3.画像の圧縮を選択すると、この特定の画像に最適な技術が使用されます。
4.画像のヘッダーを設定する
- short [ ] 結果配列の最初と 2 番目の値を幅と高さの値に設定します。
- short[ ] 結果配列の 3 番目の値を、水平圧縮の場合は 1、垂直圧縮の場合は 2 に設定します。
5.画像本体の設定
- short [ ] 結果配列の残りの部分は、RLE の数量と値で埋められます。
他にもいくつかの方法があります
誰かがそれらを手伝いたい場合:
public static void write(short[], String)
圧縮された画像と目的のファイル名を表す short の 1D 配列が渡されます。
ファイル名に .compressed 拡張子を追加して、値をテキスト ファイルに書き込むだけです。
public static short[] read(String)
圧縮された画像ファイル名が渡されます。
単純に値を読み取り、short の 1D 配列で返します。
public static short[][] decompress(short[])
圧縮された画像を表す short の 1D 配列が渡されます。
- 画面に表示できるように、ファイルを解凍するだけです
- 既にある showGrayImage( ) コードを使用します。
前もって感謝します!