私は、それぞれのビットレート、つまり(0 ->255 )に応じてさまざまな値を持つバイトの2次元配列の形式でそれらの表現を取得するグレースケール画像を持っています。次に、1 つまたは複数の圧縮アルゴリズム(ランレングス エンコーディング)を適用 して、サイズがはるかに小さい別のバイト配列を抽出します。これは圧縮操作を表します。それから、解凍操作を表すビットマップファイルを元の形式に正常に再構築します。解凍操作の結果として同じ画像が返されるので、すべてがうまくいっていることがわかります。
今私の問題は、圧縮操作を行った後、結果の配列をファイルに保存し、その内容が解凍時に抽出されることです。テキストファイルとして書いてみました
FileOutputStream output = new FileOutputStream(new File("d:/"+ fileName+".jrle"));
IOUtils.write(rle, output);
バイナリファイルとして書いてみました
ObjectOutputStream myStream = new ObjectOutputStream(new FileOutputStream("d:/"+fileName+".dat"));
myStream.writeObject(rle);
ただし、どちらの場合も、このファイルのサイズは元のビットマップ ファイルのサイズよりもはるかに大きくなります。
512x512 ビットマップ ファイルサイズ 32KB
圧縮テキストファイルサイズ 272KB
圧縮バイナリファイルサイズ 257KB
ビットマップのバイト配列サイズ 262144
圧縮配列サイズ 111049
圧縮された配列は実際にはビットマップ ファイルから抽出された元の配列よりもはるかに小さいため、ビットマップよりも小さいサイズのファイルとして保存するにはどうすればよいですか?
私は自分自身を適切に説明したかどうか確信が持てません。必要に応じて詳細を尋ねてください。
ありがとう!