2010-08-11 17 views
1

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?

+2

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

+0

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? –

+0

Cela fonctionne aussi avec 'createCompatibleImage', mais" setBackground "n'a pas peint l'arrière-plan donc je pensais que c'était noir, merci! –

Répondre

1

Comme l'a souligné Tedil, g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.OPAQUE) fait l'affaire.