0

課題で困っています。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( ) コードを使用します。

前もって感謝します!

4

0 に答える 0