Рисование изображения с использованием субпиксельной точности с использованием Graphics2D

В настоящее время я пытаюсь рисовать изображения на экране с постоянной скоростью, как в видеоигре.

К сожалению, из-за скорости, с которой движется изображение, некоторые кадры идентичны, потому что изображение еще не переместилось на полный пиксель.

Есть ли способ предоставить Graphics2D значения float для положения на экране для рисования изображения, а не значения 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?

7
задан Kaushik Shankar 30 December 2011 в 06:42
поделиться