cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016
-
26 mai 2008 à 17:00
cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016
-
27 mai 2008 à 16:02
Salut,
Je cherche comment faire une zone sélectionnable en JAVA. J'ai une image qui s'affiche dans mon applet avec la méthode g.drawImage() etc.. et je voudrais pouvoir rogner cette image. J'ai trouver la méthode pour rogner l'image avec CropImageFilter mais je cherche maintenant comment pouvoir selectionner une partie de l'image et que cela enregistre les coordonnées ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 27 mai 2008 à 13:55
Salut,
bon vu que de toutes façons ça va se finir comme ça ^^, voici un
code d'exemple pour une sélection (sur image ou non), le code ne traite
pas la découpe de l'image donc il faudra que tu le gère toi même :
@Override
public void paintComponent(final Graphics g) {
super.paintComponent(g);
final Graphics2D g2 = (Graphics2D) g;
if (image != null) {
// dessine l'image en haut à gauche
// fleme de faire mieux
g2
.drawImage(image, 0, 0, image.getWidth(),
image.getHeight(), this);
}
if (pmove != null && porig != null) {
g2.setColor(Color.BLACK);
// calcul de la selection
final Rectangle rect = new Rectangle((pmove.x > porig.x) ? porig.x : pmove.x,
(pmove.y > porig.y) ? porig.y : pmove.y,
(pmove.x > porig.x) ? pmove.x - porig.x : porig.x
- pmove.x, (pmove.y > porig.y) ? pmove.y
- porig.y : porig.y - pmove.y);
// dessine le fond de la selection avec un effet de transparence
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .2f));
g2.fillRect(rect.x, rect.y, rect.width, rect.height);
// suppression de la transparence pour dessiner la bordure
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
g2.drawRect(rect.x, rect.y, rect.width, rect.height);
}
}
public void mousePressed(final MouseEvent e) {
porig = e.getPoint(); // récupération du point d'origine
// repaint du composant
repaint();
}
public void mouseReleased(final MouseEvent e) {
// cleanup de l'affichage, mais tu peux faire la découpe ici
pmove = null;
porig = null;
// repaint du composant
repaint();
}
public void mouseDragged(final MouseEvent e) {
pmove = e.getPoint(); // récupération du point en déplacement
// repaint du composant
repaint();
}
public void mouseClicked(final MouseEvent e) { }
public void mouseEntered(final MouseEvent e) { }
public void mouseExited(final MouseEvent e) { }
public void mouseMoved(final MouseEvent e) { }
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 26 mai 2008 à 17:39
Salut,
utilise un MouseListener (voir en plus un MouseMotion) sur le composant qui contient l'image et dans les méthodes listener tu recup les coordonnées et fait ton ptit boulot avec CropImageFilter
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016 26 mai 2008 à 18:04
Ok merci je vais reagrder cela de plus près mais est ce que quand l'utilsiateur restera cliqué la zone s'affichera pour qu'il voit ce qu'il selectionne quand même ?
cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016 27 mai 2008 à 10:14
Ouai mais dans mon cas je dessine mon image avec :
g.drawImage(monImage, 100, 100, largeurFin, hauteurFin, this); // on dessine l'image
Mais il n'est pas possible de faire g.addMouseMotionListener() ou autre on ne peut pas lui mettre d'ecouteur comment faire alors ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 27 mai 2008 à 10:24
Salut,
comme dit plus haut :
"utilise un MouseListener (voir en plus un MouseMotion) sur le composant
qui contient l'image et dans les méthodes listener tu recup les
coordonnées et fait ton ptit boulot avec CropImageFilter"
soit le composant dans le quel tu ajoutes ou dessine l'image....
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016 27 mai 2008 à 12:18
C'est bon j'ai bien réussi mais comment faire pour que la zone que sélectionne l'utilisateur soit encadrée un peu comme dans un logiciel graphique car je ne trouve pas comment faire ?
Merci
cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016 27 mai 2008 à 14:42
Merci beaucou je en commenaçnt à lire ton code je me suis simplement rendu comtpe que je n'avais pas ajouté l'écouteur MouseMotionListener voila pourquoi cela ne marchait pas merci à toi
cs_flolag
Messages postés113Date d'inscriptionmardi 9 avril 2002StatutMembreDernière intervention12 août 2016 27 mai 2008 à 14:57
Dès qu'il rentre dans le mouseDragged une variable se met à true et cela relance la methode paint() ainsi g.drawRect(xDebut, yDebut, (xFin-xDebut), (yFin-yDebut)); donc par exemple je clic avec la souris et je reste appuyé je fais un carré grand et au final toujours en restant cliqué je diminue le carré et bien sur mon applet le carré ne se diminue pas car l'autre plus grand reste toujours affiché.
public class Test extends JApplet implements MouseListener, MouseMotionListener{
/**
*
*/
private static final long serialVersionUID = 6119368348214439013L;
int xDebut;
int yDebut;
int xFin;
int yFin;
Point pFin = null;
Point pDebut = null;
BufferedImage monImage;
boolean SourisTrainee;
int xDebutSavePrSuppr;
int yDebutSavePrSuppr;
int wSavePrSuppr;
int hSavePrSuppr;
public void init() {
this.getContentPane().setSize(800, 600);
this.getContentPane().setBackground(Color.green);
this.getContentPane().addMouseListener(this);
this.getContentPane().addMouseMotionListener(this);
Cursor monCurseur = new Cursor(1);
this.getContentPane().setCursor(monCurseur);
SourisTrainee = false;