Я пишу виджет, который делает некоторое кеширование, чтобы избежать ненужных вызовов 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)
. null
для (2), кажется, работает (я не хочу преобразований). Но для (1)
я понятия не имею, какой тип изображения выбрать. Есть ли способ попросить «правильный» один во время выполнения?
зависит - вам нужно, чтобы буферизованное изображение было прозрачным? если нет, BufferedImage.TYPE_INT_RGB может быть в порядке. Вы также можете создать «совместимое» изображение. См. «BufferedImage img = g.getDeviceConfiguration(). CreateCompatibleImage ( width, height, Transparency.OPAQUE); где g - экземпляр Graphics2D – Tedil
Я пробовал разные типы изображений, среди них TYPE_INT_RGB, но я получаю в лучшем случае черно-белое изображение. С CompatibleImage я получаю черное изображение. [EDIT] С TYPE_INT_ARGB Я получаю красочное изображение, но будет ли оно одинаковым на каждой платформе? –
Он также работает с 'createCompatibleImage', но« setBackground »не рисовал фон, поэтому я думал, что он черный, спасибо! –