Java で画像のモザイクを作成しようとしています。作成する新しい画像のサイズを計算し、モザイクの一部となる各サブ画像に対して、ペイント コールを実行します。
擬似コード:
create buffered image big enough to hold entire mosaic
create Graphics2D context from that image
for each buffered subimage that will be a part of the mosaic
draw the subimage on the graphics context of big bufferedimage
g2.drawImage(myImage, x,y,width,height,null,null)
これを行うより良い方法はありますか?サブイメージをより大きなイメージに変換またはスケーリングしたくないので、何らかの直接コピー操作が利用できることを願っています。各サブイメージのラスターの配列コピーに似たもの。Raster オブジェクトを受け取る setData メソッドがあることに気付きましたが、このメソッドは、Raster が同じ座標空間にある必要があることを示しています。
何かご意見は?これは私のプログラムのボトルネックであり、できるだけ高速にしたいと考えています。
編集:ボトルネックがどこにあるかについて、私が間違っていたことがわかりました(確かなデータなしで仮定が行われる場合によくあることです)。メモリにキャッシュされた画像の縮小版を使用するのではなく、複数の 3MB の画像が何度も何度も読み取られるというバグがありました。修正すると、実行時間が 50 分から 15 秒になりました。