2011-09-16 49 views
2

我一直在閱讀有關亞像素精度,但無法找到一種方法來做到這一點。亞像素圖形運動

問:如何以非整數速度在Canvas之間移動BufferedImage而不會出現口吃?

我可以從邏輯上理解過程是如何發生的 - 輕微調整抗鋸齒大小,但是我無法在Java中重新創建這個過程。 (我已經在那裏,默認創建的最直觀的對象這樣的效果與Flash的經驗。)

注:我以前就提交了question這個話題,但仍然在尋找更多的信息後,我無法實現我學到的東西。

如果不是太麻煩,一個簡單的例子將非常感激。

在此先感謝。

編輯:我這是怎麼理解的,可以達到的效果,但它不爲我工作:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
g2.draw(new Rectangle2D.Double(x, y, width, height)); 

有一個在X &雙和類似INT值之間沒有明顯的變化y字段,當我嘗試創建非常慢的運動時(例如基於系統時間),我看到矩形不做任何事情,而是每隔一段時間移動一個像素。

+0

爲什麼'Canvas'?並沒有從'javax.swing'? - 這可能是原因。你看到[this](http://today.java.net/today/2006/02/23/SmoothAnimationDemo/com/sun/animation/SmoothAnimation.java)的例子嗎? –

回答

2

ButtonUITest提供了效果的並排比較。

image

在許多平臺上,它可以放大顯示看多。在Mac OS X上, - - 的工作原理與/Developer/Applications/Graphics Tools/Pixie.app一樣。在支持Java的其他平臺上,Zoom是用於檢查抗鋸齒像素的便捷工具。

+0

謝謝你的回答,但不幸的是我不明白這與我的問題有什麼關係。我可以在形狀上創建AA效果,但當對象每幀移動非全部像素數量時,我無法創建平滑移動。 – Acidic

+0

啊,你正在尋找一個動畫演示。您必須在每個幀中將「Rectangle2D」座標移動一個像素的一小部分才能看到效果。 – trashgod

+0

這正是我所做的,但沒有明顯的效果! – Acidic

1

嘗試還設置以下的呈現提示(以及抗鋸齒):

g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 
+0

這似乎產生了相當大的影響,但我無法判斷它是好是壞。儘管如此,我仍然可以檢測到口吃。 – Acidic