【发布时间】:2012-01-30 09:44:04
【问题描述】:
我目前正尝试像在视频游戏中一样以固定速率在屏幕上绘制图像。
不幸的是,由于图像移动的速度,一些帧是相同的,因为图像还没有移动一个完整的像素。
有没有办法向 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中实现图像的亚像素渲染效果?
【问题讨论】:
标签: java image graphics graphics2d subpixel