我目前正試圖在屏幕上以像電視遊戲中的常規速率繪製圖像。使用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