J'écris un widget qui effectue une mise en cache pour éviter les appels inutiles à Shape.draw sur un tas de formes à chaque repeindre.BufferedImage imageType in swing
J'ai essayé de faire quelque chose comme ça (code 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)
}
Je ne sais pas quoi mettre dans (1)
et (2)
. null
pour (2) semble fonctionner (je ne veux pas de transformation). Mais pour (1)
je n'ai aucune idée de quel type d'image choisir. Existe-t-il un moyen de demander le "bon" à l'exécution?
dépend - avez-vous besoin que l'image mise en mémoire tampon soit transparente? sinon, BufferedImage.TYPE_INT_RGB peut être correct. Vous pouvez également créer une image "compatible" à la place. Voir 'BufferedImage img = g.getDeviceConfiguration(). CreateCompatibleImage ( largeur, hauteur, Transparency.OPAQUE);' où g est une instance de Graphics2D – Tedil
J'ai essayé différents types d'images, parmi lesquels TYPE_INT_RGB, mais j'obtiens au mieux une image en noir et blanc. Avec une image compatible, j'obtiens une image noire. [EDIT] Avec TYPE_INT_ARGB, j'obtiens une image colorée, mais est-ce la même chose sur chaque plate-forme? –
Cela fonctionne aussi avec 'createCompatibleImage', mais" setBackground "n'a pas peint l'arrière-plan donc je pensais que c'était noir, merci! –