Selection dans une image

Contenu du snippet

Créer une Zone de sélection dans Une Image
--Ben Rached Marwen----
--Marwen Ben Rached ----
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Source / Exemple :


import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.imageio.stream.FileImageInputStream;
import javax.swing.*;
import javax.swing.event.*;
 
public class ImageSelection
{
    public static void main(String[] args)
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new JScrollPane(new ImageSelectionPanel()));
        f.setSize(400,400);
        f.setLocation(200,200);
        f.setVisible(true);
    }
}
 
class ImageSelectionPanel extends JPanel
{
    BufferedImage image;
    Rectangle clip;
 
    public ImageSelectionPanel()
    {
        loadImage();
        clip = new Rectangle();
        setBackground(Color.black);
        Selector selector = new Selector(this);
        addMouseListener(selector);
        addMouseMotionListener(selector);
    }
 
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
        int w = getWidth();
        int h = getHeight();
        int imageWidth = image.getWidth();
        int imageHeight = image.getHeight();
        int x = (w - imageWidth)/2;
        int y = (h - imageHeight)/2;
        AffineTransform at = AffineTransform.getTranslateInstance(x, y);
        g2.drawRenderedImage(image, at);
        g2.setPaint(Color.red);
        g2.draw(clip);
    }
 
    public void setClipFrame(Point start, Point end)
    {
        clip.setFrameFromDiagonal(start, end);
        repaint();
    }
 
    public Dimension getPreferredSize()
    {
        return new Dimension(image.getWidth(), image.getHeight());
    }
 
    private void loadImage()
    {
        String fileName = "images/owls.jpg";
        try
        {
            URL url = getClass().getResource(fileName);
            File file = new File(url.getFile());
            image = ImageIO.read(new FileImageInputStream(file));
        }
        catch(MalformedURLException mue)
        {
            System.out.println("url: " + mue.getMessage());
        }
        catch(IOException ioe)
        {
            System.out.println("read: " + ioe.getMessage());
        }
    }
}
 
class Selector extends MouseInputAdapter
{
    ImageSelectionPanel selectionPanel;
    Point start;
    boolean dragging, isClipSet;
 
    public Selector(ImageSelectionPanel isp)
    {
        selectionPanel = isp;
        dragging = false;
        isClipSet = false;
    }
 
    public void mousePressed(MouseEvent e)
    {
        if(isClipSet)             // clear existing clip
        {
            selectionPanel.setClipFrame(start, start);
            isClipSet = false;
        }
        else                      // or start new clip
        {
            start = e.getPoint();
            dragging = true;
            isClipSet = true;
        }
    }
 
    public void mouseReleased(MouseEvent e)
    {
        dragging = false;
    }
 
    public void mouseDragged(MouseEvent e)
    {
        if(dragging)
            selectionPanel.setClipFrame(start, e.getPoint());
    }
    
    }

Conclusion :


Marwen Ben Rached

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.