Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3040 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Dessiner un rectangle sur une image

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Dessiner un rectangle sur une image

n°1572522
pika842
Posté le 08-06-2007 à 18:23:37  profilanswer
 

Bonjour,
 
Voila alors j'ai une image dessinee dans un JPanel (image qui peut change suivant les actions sur une JTable) et je voudrais pouvoir dessiner sur cette image des rectangles 9ou l'on verrai que le contour. C'est en fait pour que l'utilisateur puisse selectionner certaine partie de l'image.
Le rectangle serait donc defini comme sur un logiciel comme paint, l'utilisateur clique sur le bouton gauche puis bouge la souris jusqu a ce que la taille lui convienne..et lache le bouton.
 
Mon probleme est que je n'arrive pas a effacer le rectangle dessine au fur et a mesure que l'utilisateur l'agrandi.
 
voila mon bout de code :
 

Code :
  1. panImagePage = new ChangeImageJPanel("./src/img/ImageJPG.jpg" );
  2. panImagePage.setLayout(null);
  3. panImagePage.setLocation(new Point(16, 101));
  4. panImagePage.setSize(new Dimension(353, 446));
  5. panImagePage.addMouseListener(new MouseListener()
  6.   {
  7.    public void mouseClicked(MouseEvent e)
  8.    {
  9.    }
  10.       public void mousePressed(MouseEvent e)
  11.       {
  12.        xs = e.getX();
  13.     zs = e.getY();
  14.     start=1;
  15.       }
  16.       public void mouseReleased(MouseEvent e)
  17.       {
  18.        Graphics g = getGraphics();
  19.        xf = e.getX();
  20.     zf = e.getY();
  21.     int x = (int)xs + 16 + 331 + 5;
  22.                 int y = (int)zs + 101 + 18 + 23;
  23.                 int x1 = (int)xf - (int)xs;
  24.                 int y1 = (int)zf - (int)zs;
  25.     g.drawRect(x,y,x1,y1);
  26.     start=0;
  27.     nextX = 0;
  28.     nextY = 0;
  29.       }
  30.       public void mouseEntered(MouseEvent e)
  31.       {
  32.       }
  33.       public void mouseExited(MouseEvent e)
  34.       {
  35.       }
  36.   });
  37.   panImagePage.addMouseMotionListener(new MouseMotionListener(){
  38.    public void mouseDragged(MouseEvent e) {
  39.     if (start==1){
  40.                  int x = (int)xs + 16 + 331 + 5;
  41.                  int y = (int)zs + 101 + 18 + 23;
  42.                  nextX = e.getX()-(int)xs;
  43.                  nextY = e.getY()-(int)zs;
  44.   Graphics g = getGraphics();
  45.      //g.clearRect(x, y, prevX, prevY);
  46.      g.clipRect(x,y,nextX,nextY);
  47.      g.drawRect(x,y,nextX,nextY);
  48.                  g.dispose();
  49.      }
  50.    }
  51.    public void mouseMoved(MouseEvent e) {
  52.    }
  53.   });


 
La j'utilise g.clipRect pour justement ne pas avoir ce probleme mais c'est une solution de secours.
Puis de toute facon si l'utilisateur revient en arriere ( reduit le rectangle) cela repose le probleme.
 
Desole pour les accents, je suis sur un clavier anglais.
merci beaucoup.

mood
Publicité
Posté le 08-06-2007 à 18:23:37  profilanswer
 

n°1574595
wapcamer
Posté le 13-06-2007 à 19:37:05  profilanswer
 

Salut,  
ton pb ,c'est que tu dois séparer la partie dessin de la partie traitement des inputs souris/claviers/etc...
 
Tu devrais pt-e aussi considérer l'utilisation d'un canvas plutot qu'un JPanle pr dessiner.
L'idée c'est que ton image se rafraichit indépendamment du reste.
P.ex. tu as un thread qui court qui rafraichit l'image tous les tant de s. Pendant ce temps, lorsque tu cliques avec ta souris, tu enregistres des infos comme quoi il y a un clic droit à tel position et le bouton n'est pas relaché. Et tu enregistres aussi les déplacements de la souris.
 
En pseudocode, ca donnerait une méthode du genre:

Code :
  1. void paint(Graphics g){
  2.     draw(image de fond);
  3.     if (click droit appuyé && click droit non relâché && souris a bougé){
  4.         drawRect(pos_init, pos_new, etc...);
  5.     }
  6. }
  7. void mousePressed(event e){
  8.     pos_init_X=e.getX();
  9.     pos_init_Y=e.getY();
  10. }
  11. void mouseDragged(event e){
  12.     pos_new_X=e.getX();
  13.     pos_new_Y=e.getY();
  14. }
  15. etc...


 
La grosse différence par rapport à ta méthode, c'est que l'image est toujours rafraichie et tu n'attends plus une action utilisateur dans MouseDragged pour redessiner.


---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Dessiner un rectangle sur une image

 

Sujets relatifs
Simuler un input file avec une image[CSS] image de fond dans une cellule td sous safari
extrait des objet a partir d'une histogramme d'une image[c] charger une image pixel par pixel dans un tableau
orientation imagepdf vers fichier image
Supprimer le cadre de sélection autour d'une image lien.[RESOLU] Redimensionner une image
MSSQL : Datatype "image" : comment exporter ?dessiner un rectangle vide sur une image
Plus de sujets relatifs à : Dessiner un rectangle sur une image


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR