
{filelink=10269}
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();
}
}