import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import javax.swing.*; import java.awt.*; import java.io.File; import javax.imageio.ImageIO; import java.awt.event.*; /* * @auteur sakoba adams * Modification de l'aspect visuel d'une * image en java en appliquant l'effet * cisaillement. */ public class ImageCisaillement extends JFrame { private BufferedImage image; private ImageCisaillement()throws Exception { super("Manipulation des image"); setSize(400, 400); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); add(new JLabel("Pour commencer cliquez sur l'option " +"sélectionner une image dans le menu fichier" +"Ensuite sur l'option cisailler l'image dans le même menu")); // Dessiner le menu de JFrame JMenu menu=new JMenu("Fichier"); JMenuItem editImage=new JMenuItem("Cisailler l'image sélectionnée"); JMenuItem chooseImage=new JMenuItem("Ouvrir une image..."); menu.add(chooseImage); menu.add(editImage); JMenuBar barMenu=new JMenuBar(); barMenu.add(menu); setJMenuBar(barMenu); /* * Ajouter un événement clique au * menu "ouvrir une image" * à l'aide d'une classe interne anonyme */ chooseImage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JFileChooser choix=new JFileChooser(); int op=choix.showOpenDialog(null); if(op==JFileChooser.APPROVE_OPTION) { paintFrame(choix.getSelectedFile().getPath()); } } }); /* * Ajouter un événement clique au * menu "Cisailler l'image sélectionnée" * à l'aide d'une classe interne anonyme */ editImage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { cisailler(); } } ); } // Ajouter une image au fond de JFrame private void paintFrame(String fichierImage) { try{ Image img = ImageIO.read(new File(fichierImage)); image = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_BYTE_INDEXED); image.getGraphics().drawImage(img, 0, 0, null); add(new JComponent() { public void paintComponent(Graphics g) { if (image != null) g.drawImage(image, 0, 0, null); } }); invalidate(); validate(); }catch(Exception err) { JOptionPane.showMessageDialog(null,err); } } // Cisailler l'image private void cisailler() { AffineTransform transformer = new AffineTransform(); transformer.shear(2, 3); AffineTransformOp op = new AffineTransformOp(transformer, AffineTransformOp.TYPE_BILINEAR); image = op.filter(image, null); repaint(); } public static void main(String[] argv) throws Exception { JFrame frame=new ImageCisaillement(); } }