3

私の質問は、Java Graphics2DのdrawImageメソッドに関するものです (これは Android ではなくデスクトップ アプリ用です)。

描画したい BufferedImage には高解像度のバイナリ データが含まれています。ほとんどのピクセルは黒ですが、まばらな緑のピクセルがいくつかあります (緑のピクセルは、受信した生データ ストリームからのデータ ポイントを表します) 。ビットマップは非常に大きく、通常のパネル サイズよりも大きくなっています。拡大・縮小できるように大きくしました。問題は、ズームアウトすると緑色のピクセルの一部が失われることです..例として、画像が 1000 ピクセルでパネルが 250 ピクセルの場合、各方向 (X と Y) で 4 ピクセル中 1 ピクセルを失うことになります。スケーリング時に最近傍補間を使用すると、ピクセルが黒く消えることがあります。双一次補間のようなものを使用すると、緑のピクセルが黒と緑の間のどこかに再着色されます。

私はこのすべての動作を理解していますが、私の質問は、私が望む動作を取得する方法があるということです。つまり、黒以外のピクセルがあるかどうかを確認して、最大強度で描画したいのです。おそらく「最大保持」補間のようなものです。

黒い背景の上に形状プリミティブを描画することで、おそらくやりたいことができることに気づきました。おそらくこれが私がしなければならないことです。しかし、私がビットマップを使用している理由があります (立ち下がりスペクトログラム タイプのディスプレイでデータを表示しているという事実と関係があります。また、黒だけでなく、すべてのピクセルを色付けできるモードがあります)。緑)。

ありがとう、

4

1 に答える 1

0

drawImage の実​​装を見て、それをオーバーライドして目的の動作を得ることができますが、おそらくスケーリングのコアはハードウェア アクセラレーションを使用するため、Java で再実装すると非常に遅くなります。

JOGL を調べることもできますが、私の印象では、ピクセルが非常にまばらである場合、黒い背景 (または画像の上) に緑色のピクセルを描画するだけで、コーディングが簡単になり、非常に高速になります。ドットの数が多すぎる場合は、ドットの描画と画像のスケーリングをヒューリスティックに切り替えることもできます。

于 2012-10-26T23:48:49.797 に答える