我目前正试图在屏幕上以像电视游戏中的常规速率绘制图像。使用Graphics2D使用亚像素级别准确性绘制图像
不幸的是,由于图像移动的速度,一些帧是相同的,因为图像还没有移动完整的像素。
有没有办法提供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中图像子像素渲染的预期效果?
嘿劳伦!感谢您的回应。非常感谢您向我展示如何做到这一点! – 2012-01-05 23:03:20
为什么t.scale(1,1); ?? AFAIK该指令什么都不做? (缩放至其实际尺寸?) – pakore 2013-03-01 14:34:11