j'ai vu qu il etait possible de rendre opaque des panels (setOpaque(true)).
Mais comment faire avec des dessins. Par exemple je souhaiterais rendre opaque tout ce qu il y a dans un ovale dessiné comme suit
merciCode:
1
2 g2.fillOval(0,0,100,100);
Version imprimable
j'ai vu qu il etait possible de rendre opaque des panels (setOpaque(true)).
Mais comment faire avec des dessins. Par exemple je souhaiterais rendre opaque tout ce qu il y a dans un ovale dessiné comme suit
merciCode:
1
2 g2.fillOval(0,0,100,100);
En faisant varier le Paint (couleur ou gradient ou texture) associe a ton contexte graphique tu peux faire faire que ton oval soit translucide ou pas.
Sinon si tu veux faire varier la transparence des objets deja present a l'endroit ou tu dessines ton oval. Il te faut voir du cote des operations de type AlphaComposite. Et faire en sorte que l'alpha de la couleur utilisee pour dessiner l'oval influe sur les couleurs des objets en-dessous.
La formule montrant comment pour un pixel donne la couleur destination (celle deja presente sur l'image) varie en fonction la valeur RGB et de l'apha de la couleur source (celle utilisee pour peindre l'oval) et en fonction des constantes pre-definies pour chaque type de composite est decrite dans la documentation de la class AlphaComposite.
Ensuite si tu prend une couleur ARGB source de type (n , 0, 0, 0) pour peindre ton ovale, a priori, seule l'alpha devrait avoir une influence sur la valeur destination.
Comme ce que j'explique ne doit pas etre tres clair, le mieux est de regarder la demo Java2Demo (demo/jfc/java2D dans le JDK), onglet Composite et d'experienter plusieurs valeurs de couleurs et plusieurs types de composite par toi-meme.
Note la composite par defaut doit etre SRC_OVER qui indique bien que quand on dessine quelque chose, cela d'affiche audessus de ce qui pre-existe (on dessine la source par dessus la destination).
PS : repond plutot dans le topic plutot que d'envoyer des MP surtout quand ca a un rapport direct avec le sujet de la discussion car je ne pense pas toujours a regarder ma mail box (cf : intervention precedente sur le zoom).
merci de ta reponse qui fonctionne totalement.
mais je me suis debrouillé autrement parce que à cause d'un nouveau besoin imprévu j'ai du moddifier deux petites choses. Par contre si l'on reste dans le domaine de la transparence, saurais tu comment rendre un background transparent, parce que ca ne marche pas avec les alphacomposite
merciCode:setBackground(Color.black);
Cela depent du type de ton image. Essaie avec BufferedImage.TYPE_INT_ARGB (au lieu de TYPE_INT_RGB).
En suite je n'ai jamais trop utilise la methode setBackground() du graphics pour ca. soit je parcoure tous les pixels de mon image et les met manuellement a la couleur transparente via setRGB() (en general (0,0,0,0)). Soit j'utilise l'une des methodes de creation qui a ete inspiree par le blog et les posts de Gfx.
Hum attends que je fouille un peu... voila, quelques chose dans ce genre :
Avec transparency a l'une des valeurs suivantes :Code:
1
2
3 GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); BufferedImage result = configuration.createCompatibleImage(width, height, transparency);
- Transparency.BITMASK
- Transparency.OPAQUE
- Transparency.TRANSLUCENT