Effacer une image tampon transparente aussi vite que possible
J'ai un transparent BufferedImage créé avec le code suivant(pas pertinentes de la façon dont il est créé, je pense):
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
Rectangle screen = transformationContext.getScreen();
//Create an image that supports transparent pixels
return gc.createCompatibleImage((int) screen.getWidth(), (int) screen.getHeight(),
Transparency.BITMASK);
Comment puis-je effacer l'image(image vide dans le même état qu'il a été créé) dans la manière la plus rapide possible, sans recréer de l'image? Recréer l'image met un fardeau sur GC, la pause de la VM et le gel de l'INTERFACE utilisateur.
source d'informationauteur adrian.tarau | 2010-03-02
Vous devez vous connecter pour publier un commentaire.
Eu 🙂 utilisé clearRect au lieu de remplir avec une couleur transparente.
Relativement rapide, mais je ne sais pas si c'est la manière la plus rapide (et j'aimerais voir les autres réponses) est d'avoir une autre image que vous ne modifiez jamais et qui est toujours "entièrement effacé" /"totalement transparent" et puis tu fais une copie de raster, disons que vous avez nommé cette copie CLAIRE:
Remarque que le fait de travailler avec des graphiques peut être très difficile quand il s'agit de performance, car il ya beaucoup de pas-très-bien documenté comportement. Par exemple, vos images (dire le CLAIR) peut être accélération matérielle, mais vous pouvez perdre accélération matérielle dès que vous utilisiez une mutation de la méthode (comme, disons, un setRgb()) et il serait très difficile de réaliser que vous venez de perdre le bénéfice de l'accélération matérielle.
Je pense que le meilleur endroit pour trouver des infos sur le sujet de la performance BufferedImage serait dans le jeu Java-programmeurs et jeu Java-API-programmeurs de la communauté/forums.
Btw assurez-vous que votre BufferedImage sont à l'aide de la "compatible" mode: TYPE_INT_ARGB peut-être bien sur Windows mais pas sur OS X, etc. si vous souhaitez créer eux de faire quelque chose comme:
Ouch la Loi de Déméter fait mal, grâce Java 😉