|
Réalisation 
|
|
Problème d'affichage XOR et Shape sur un panneau
|
Salut, pour une application graphique, je cherche à balader un rectangle
sur un affichage graphique du bout de la souris. La méthode la plus simple
selon moi pour cela est d'afficher le rectangle de la couleur désirée en
faisant un xor avec l'image déja existante sur le panneau. Pour cela,
j'utilise le code suivant :
public static void xorSquare(Point point, Paint paint, Graphics2D g2d,
int
zoomFactor) {
Paint previousPaint = g2d.getPaint();
Point displayed = new Point(point.x*zoomFactor, point.y*zoomFactor);
g2d.setPaint(paint); Rectangle toDraw = new Rectangle(displayed.x,
displayed.y, zoomFactor,
zoomFactor);
Area toDisplay = new Area(toDraw);
g2d.setClip(toDraw);
Rectangle clip = g2d.getClipBounds();
toDisplay.exclusiveOr(new Area(clip));
g2d.fill(toDraw);
g2d.setPaint(previousPaint);
}
}
Si ce code affiche bien le rectangle de la bonne couleur, le problème
immédiat est que, loin de faire un xor, l'image est remplacée par le
rectangle de la couleur donnée (en l'occurence blanc) par l'objet Paint.
Et naturellement, elle n'est pas remplacée lorsque la souris se déplace
par l'image originale : le rectangle reste banalement blanc ! Je soupçonne
de ne pas faire les choses correctement (logique, puisque rien ne
s'affiche), et en particulier avec mon Graphics. Quelqu'un pourrait-il me
mettre sur la bonne voie ?
Merci
Nicolas Delsaux
 |
 |
Nicolas Delsaux:
Quelqu'un pourrait-il me mettre sur la bonne voie ?
Ce n'est pas le bon ou exclusif. Le xor utilise dans ton code correspond a
la creation de surfaces selon le modele CSG. Le xor pour le dessin se
definit avec la methode setXORMode(Color) de Graphics.
http://www.memoire.com/jdk/?java.awt.Graphics
Guillaume