Zone sélectionnable image
Bonjour,
J'ai une image dans laquel je selectionne une zone, je veux que quand on selectionne cette zone elle s'enregistre pour pouvoir la traiter apres sinon soit elle reste selectionner et se considere comme l'image de traitement ou elle s'affiche dans une autre fenetre tte seul mais j'arrive pas à le faire voila mon code je suis preneuse de n'importe quel aide merci
Code:
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class testimage extends JComponent implements MouseListener,
MouseMotionListener {
private static final long serialVersionUID = 7774248752982522933L;
private BufferedImage image = null;
private Point porig = null;
private Point pmove = null;
public static void main(String args[]) {
final JFrame f = new JFrame("Selection Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 600);
f.setLocationRelativeTo(null);
try {
f.setContentPane(new testimage(new File("d:/test.bmp")));
} catch (final IOException e) {
e.printStackTrace();
}
f.setVisible(true);
}
public testimage(final File image) throws IOException {
this.image = ImageIO.read(image);
porig = null;
pmove = null;
// ajout des listeners
addMouseListener(this);
addMouseMotionListener(this);
}
@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) { }
} |