1
我正在編寫一個小部件,它會執行一些緩存操作,以避免在每次重繪時對Shape.draw進行不必要的調用。BufferedImage imageType in swing
我一直試圖做這樣的事情(Scala代碼):
private val buffer = new BufferedImage(width, height, /* (1) */)
...
override def paintComponent(Graphics2D g) = {
if (hasChanged) {
val bg = buffer.getGraphics.asInstanceOf[Graphics2D]
bg.draw(/* ... */)
buffer.flush
}
g.drawImage(buffer, null /* (2) */, 0, 0)
}
我不知道要放什麼東西在(1)
和(2)
。 (2)的null
似乎工作(我不想改造)。但對於(1)
我不知道要選擇哪種圖像類型。有沒有在運行時要求「正確」的方法?
取決於 - 你需要緩衝的圖像是透明的嗎?如果沒有,BufferedImage.TYPE_INT_RGB可能沒問題。 您可能還想創建一個「兼容」圖像。參見'BufferedImage img = g.getDeviceConfiguration()。createCompatibleImage( width,height,Transparency.OPAQUE);' 其中g是Graphics2D的一個實例 – Tedil 2010-08-11 14:05:53
我嘗試過不同的圖像類型,其中TYPE_INT_RGB,但我最多隻能得到黑白圖像。用CompatibleImage,我得到一個黑色的圖像。 [編輯]用TYPE_INT_ARGB我得到一個豐富多彩的圖像,但這將在每個平臺上都是一樣的嗎? – 2010-08-11 14:17:27
它也適用於'createCompatibleImage',但是「setBackground」沒有繪製背景,所以我認爲它是黑色的,謝謝! – 2010-08-11 14:23:52