3

BufferedImage を取得し、(jtransforms を使用して) フーリエ変換を適用し、データを BufferedImage に書き戻そうとしています。しかし、結果を元に戻すために新しいラスターを作成するのに行き詰まっています。ここで何か不足していますか?

BufferedImage bitmap;
float [] bitfloat = null;

bitmap = ImageIO.read(new File("filename"));
FloatDCT_2D dct = new FloatDCT_2D(bitmap.getWidth(),bitmap.getHeight());

bitfloat = bitmap.getData().getPixels(0, 0, bitmap.getWidth(), bitmap.getHeight(), bitfloat);
dct.forward(bitfloat, false);

しかし、この行を終わらせようとして困惑しています。 createRaster 関数に何を指定すればよいでしょうか? createRaster の javadoc は、私にはほとんど意味がありません。

bitmap.setData(Raster.createRaster(`arg1`, `arg2`, `arg3`));

float 配列が必要なのかどうか疑問に思い始めていますが、jtransforms の例はあまりありません。

4

2 に答える 2

4

新しいを作成しないでくださいRasterWritableRaster.setPixels(int,int,int,int,float[])配列をイメージに書き戻すために使用します。

final int w = bitmap.getWidth();
final int h = bitmap.getHeight();

final WritableRaster wr = bitmap.getData();
bitfloat = wr.getPixels(0, 0, w, h, bitfloat);

// do processing here

wr.setPixels(0, 0, w, h, bitfloat);    

この画像を表示する場合は、実際に画面互換タイプにコピーする必要があることにも注意してください。ImageIOがそれらを返すことはめったにありません。

于 2010-10-28T10:01:35.630 に答える
0

FloatDCT_2D の Google 検索を行って、それが含まれているパッケージ/ライブラリを確認しています。「edu.emory.mathcs.jtransforms.dct.FloatDCT_2D」など、さまざまなソースへの参照がいくつかあるようです。使用しているカスタム ライブラリを知らなければ、変換の実行方法についてアドバイスを与えることは非常に困難です。

一般に、元のラスターから入力データを読み取り、元のデータに対して変換を実行してから、出力を新しいラスターに書き込む必要があると思います。

ただし、最後のステートメントはすべて奇妙に Raster.createRaster()見えます...投稿したコードで参照したことのないクラスにパラメーターを指定せずに静的メソッドを呼び出しているようです。ビットマップのデータをどのように生成していますか??? 疑似コードであっても、変換の結果を取得して結果のラスタ​​ーを構築する必要があります。

于 2010-10-25T20:48:45.700 に答える