私は現在、ビデオゲームのように通常の速度で画面に画像を描画しようとしています。
残念ながら、画像の移動速度のため、画像がまだ完全なピクセルを移動していないため、一部のフレームは同一です。
float
値ではなく、画像を描画するための画面上の位置の値をGraphics2Dに提供する方法はありint
ますか?
最初に私がしたことは次のとおりです。
BufferedImage srcImage = sprite.getImage ( );
Position imagePosition = ... ; //Defined elsewhere
g.drawImage ( srcImage, (int) imagePosition.getX(), (int) imagePosition.getY() );
もちろんこれはしきい値なので、画像はピクセル間を移動しませんが、あるピクセルから次のピクセルにスキップします。
次の方法は、代わりにペイントカラーをテクスチャに設定し、指定された位置に描画することでした。残念ながら、これにより、正しいアンチエイリアスではなくタイリングを示す誤った結果が生成されました。
g.setRenderingHint ( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
BufferedImage srcImage = sprite.getImage ( );
g.setPaint ( new TexturePaint ( srcImage, new Rectangle2D.Float ( 0, 0, srcImage.getWidth ( ), srcImage.getHeight ( ) ) ) );
AffineTransform xform = new AffineTransform ( );
xform.setToIdentity ( );
xform.translate ( onScreenPos.getX ( ), onScreenPos.getY ( ) );
g.transform ( xform );
g.fillRect(0, 0, srcImage.getWidth(), srcImage.getHeight());
Javaで画像のサブピクセルレンダリングの望ましい効果を達成するにはどうすればよいですか?