Bonjour,
Alors voila, dans le cadre d'un projet de mon université, mes deux collègues et moi devont réaliser un logiciel de traitement d'image, en JAVA. Nous avons choisi d'y ajouter un petit module de dessin.
Le soucis rencontré est que le tracé des différentes formes n'est pas centré par rapport au pointeur, en gros, le tracé est situé à environ 1 cm au dessus du clic.
Vu que nous pensons que cela est dû au menu et aux bordures de la fenêtre, nous avons essayé de régler cet écart manuellement, en ajoutant quelques pixels en hauteur. Cela fonctionne tant que l'on ne redimensionne pas la fenêtre, mais ce n'est pas très propre...
Voici ma méthode paint()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public void paint(Graphics g1)
{
Graphics2D g = (Graphics2D)bimage.createGraphics();
Stroke s;
Color c;
g.drawImage(bimage, 0, 0, this);
for (Object obj : this.o)
{
if (obj instanceof Rectangle)
{
Rectangle r = (Rectangle) obj;
c = g.getColor();
g.setColor(r.getColor());
s = g.getStroke();
if (r.fill == 0)
{
g.setStroke(new BasicStroke(r.getSize()));
g.drawRect(r.getX(), r.getY(), r.getWidth(), r.getHeight());
g.setStroke(s);
}
else
{
g.fillRect(r.getX(), r.getY(), r.getWidth(), r.getHeight());
}
g.setColor(c);
}
else if(obj instanceof Line)
{
Line l = (Line) obj;
c = g.getColor();
g.setColor(l.getColor());
s = g.getStroke();
g.setStroke(new BasicStroke(l.getSize()));
g.drawLine(l.getX(), l.getY(), l.getX1(), l.getY1());
g.setStroke(s);
g.setColor(c);
}
...
}
this.jl.setIcon(new ImageIcon(bimage));
g.dispose();
} |
Constructeur de Rectangle :
public Rectangle(int x, int y, int width, int height, int size, Color color, int fill)
Et voici comment je récupère les valeurs pour les dessins :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public void clicked(MouseEvent e) //On récupère les coordonnées de départ (au clic)
{
this.debX = e.getX();
this.debY = e.getY();
}
public void endClicked(MouseEvent e) //On récupère les coordonnées d'arrivée (quand on relâche le clic)
{
this.finX = e.getX();
this.finY = e.getY();
int change;
if (!jb_l.isSelected())
{
if (debX>finX)
{
change = finX;
finX = debX;
debX = change;
}
if (debY>finY)
{
change = finY;
finY = debY;
debY = change;
}
}
if (jb_s.isSelected())
{
this.o.add(new Rectangle(debX, debY, finX - debX, finY - debY, this.pointerSize, this.pointerColor, 0));
}
...
else if (jb_l.isSelected())
{
this.o.add(new Line(debX, debY, finX, finY, this.pointerSize, this.pointerColor));
}
repaint();
} |
Voili voulou, j'espère que vous pourrez nous aider, si il existe une solution un peu plus propre et efficace que celle que nous avons déjà envisagée...
Merci et bon dimanche
Partager