Interaction sur une image
	
	
		Bonjour, 
J'ai réussi à afficher une image dans une JFrame et à lui ajouter la fonction de zoom. 
Par contre je voudrais afficher des petites boules sur cette image, par un exemple ajout d'un listener dés réception de coordonnées (x,y) ,j'affiche une boule dans cette image. 
Auriez vous une idées de la façon dont je dois procéder pour afficher ces petites boules à divers instants. Merci d'avance. 
Voici mon code qui affiche l'image avec la fonction de zoom. 
	Code:
	
| 12
 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
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 
 |  
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.swing.*;  
import javax.swing.event.*;  
 
import net.atos.graphics.Circle;
 
public class ZoomTest  
{  
    public static void main(String[] args)  
    {  
        ImagePanel panel = new ImagePanel();  
        ImageZoom zoom = new ImageZoom(panel);  
        JFrame f = new JFrame();  
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        f.getContentPane().add(zoom.getUIPanel(), "North");  
        f.getContentPane().add(new JScrollPane(panel));
        f.setSize(400,400);  
        f.setLocation(200,200);  
        f.setVisible(true);  
    }  
}  
 
class ImagePanel extends JPanel  
{  
    BufferedImage image;  
    double scale;  
 
    public ImagePanel()  
    {  
        loadImage();  
        scale = 1.0;  
        setBackground(Color.black);  
    }  
 
    protected void paintComponent(Graphics g)  
    {  
        super.paintComponent(g);  
        Graphics2D g2 = (Graphics2D)g;  
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,  
                            RenderingHints.VALUE_INTERPOLATION_BICUBIC);  
        int w = getWidth();  
        int h = getHeight();  
        int imageWidth = image.getWidth();  
        int imageHeight = image.getHeight();  
        double x = (w - scale * imageWidth)/2;  
        double y = (h - scale * imageHeight)/2;  
        AffineTransform at = AffineTransform.getTranslateInstance(x,y);  
        at.scale(scale, scale);  
        g2.drawRenderedImage(image, at);  
    }  
 
    /** 
     * For the scroll pane. 
     */  
    public Dimension getPreferredSize()  
    {  
        int w = (int)(scale * image.getWidth());  
        int h = (int)(scale * image.getHeight());  
        return new Dimension(w, h);  
    }  
 
    public void setScale(double s)  
    {  
        scale = s;  
        revalidate();      // update the scroll pane  
        repaint();  
    }  
 
    private void loadImage()  
    {  
        File file = new File("E:/route1_28.png");
        try  
        {  
            //URL url = getClass().getResource("file:///E:/route1_28.png");  
            image = ImageIO.read(file);  
        }  
        catch(MalformedURLException mue)  
        {  
            System.out.println("URL trouble: " + mue.getMessage());  
        }  
        catch(IOException ioe)  
        {  
            System.out.println("read trouble: " + ioe.getMessage());  
        }  
    }  
}  
 
class ImageZoom  
{  
    ImagePanel imagePanel;  
 
    public ImageZoom(ImagePanel ip)  
    {  
        imagePanel = ip;  
    }  
 
    public JPanel getUIPanel()  
    {  
        SpinnerNumberModel model = new SpinnerNumberModel(1.0, 0.1, 1.4, .01);  
        final JSpinner spinner = new JSpinner(model);  
        spinner.setPreferredSize(new Dimension(45, spinner.getPreferredSize().height));  
        spinner.addChangeListener(new ChangeListener()  
        {  
            public void stateChanged(ChangeEvent e)  
            {  
                float scale = ((Double)spinner.getValue()).floatValue();  
                imagePanel.setScale(scale);  
            }  
        });  
        JPanel panel = new JPanel();  
        panel.add(new JLabel("scale"));  
        panel.add(spinner);  
        return panel;  
    }  
} | 
 Je voudrais par exemple, à un moment donné dessiner sur la cette image qui est affiché , une boule rouge de cette façon : 
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | public class Circle extends JPanel{
 
    private Graphics g ;
 
    public void paintComponent(int x, int y){
 
        g.setColor(Color.RED);
        g.fillOval(500, 618, 50, 20);
 
    }
} | 
 Mais comment superposés une boule sur une image à chaque fois que j'ai de nouveaux coordonnées !! 
Merci d'avance
	 
	
	
	
		Interaction sur une image
	
	
		Bonjour,
Merci pour votre réponse , j'ai rajouté l'Ellipse.
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 |  
 protected void paintComponent(Graphics g)  
    {  
        super.paintComponent(g);  
        Graphics2D g2 = (Graphics2D)g;  
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,  
                            RenderingHints.VALUE_INTERPOLATION_BICUBIC);  
        int w = getWidth();  
        int h = getHeight();  
        int imageWidth = image.getWidth();  
        int imageHeight = image.getHeight();  
        double x = (w - scale * imageWidth)/2;  
        double y = (h - scale * imageHeight)/2;  
        AffineTransform at = AffineTransform.getTranslateInstance(x,y);  
        at.scale(scale, scale);  
 
		g2.drawRenderedImage(image, at);
        Shape s = new Ellipse2D.Double(500,389, 100, 15);
        g2.fill(s); } | 
 
Le problème est que cette Ellipse ne suit pas la translation avec le scale.
Je voudrais qu'elle subisse aussi la même Transformation que l'image initiale pour avoir de la cohérence.  (Appliquer un AffineTransform) c'est compliqué à appliquer.
Auriez vous une idée pour que cette Ellipse puisse être en norme avec l'image ? 
Merci d'avance
	 
	
	
	
		Interaction sur une image
	
	
		oh la la , pleins de méthode drawImage(..) :calim2: , laquelle choisir 8O , j'ai bien compris que tu me conseille de mettre le tout dans le graphique et affecter la transformation pour tous.
As tu essayé de faire tourner le code ca a marché pour toi ? quel méthode as tu choisi ?
Merci
	 
	
	
	
		Interaction sur une image
	
	
		Bonjour,
Merci ca fonctionne très bien :ccool: 
Bonne année A tous par la même occasion :mouarf: