voila un code vous pouvez l'utiliser
package cadre;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.awt.image.RescaleOp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class PanDessin extends JPanel {
BufferedImage monImage = null;
public PanDessin() {
super();
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
if(monImage != null)
g.drawImage(monImage, 0, 0, null);
}
protected void reduireImage()
{
BufferedImage imageReduite = new BufferedImage((int)(monImage.getWidth()*0.5),(int)( monImage.getHeight()*0.5), monImage.getType());
AffineTransform reduire = AffineTransform.getScaleInstance(0.5, 0.5);
int interpolation = AffineTransformOp.TYPE_BICUBIC;
AffineTransformOp retaillerImage = new AffineTransformOp(reduire, interpolation);
retaillerImage.filter(monImage, imageReduite );
monImage = imageReduite ;
repaint();
}
protected void fermer(){
System.exit(0);
}
protected void agrandirImage()
{
BufferedImage imageZoomer = new BufferedImage((int)(monImage.getWidth()*1.5),(int)( monImage.getHeight()*1.5), monImage.getType());
AffineTransform agrandir = AffineTransform.getScaleInstance(1.5, 1.5);
int interpolation = AffineTransformOp.TYPE_BICUBIC;
AffineTransformOp retaillerImage = new AffineTransformOp(agrandir, interpolation);
retaillerImage.filter(monImage, imageZoomer );
monImage = imageZoomer ;
repaint();
}
protected void seulliagebin(File fichierImage)
{
int se = 127;
se = Integer.parseInt(JOptionPane.showInputDialog("Donner le seuil"));
int he=0;
int we=0;
try{
BufferedReader in = new BufferedReader(new FileReader(fichierImage));
FileWriter ou = new FileWriter(fichierImage+"_seuilbin.pgm");
in.readLine();
String ch = in.readLine();
while (ch.startsWith("#"))
{
ch = in.readLine();
}
StringTokenizer st = new StringTokenizer(ch," ");
he= Integer.parseInt(st.nextToken());
we = Integer.parseInt(st.nextToken());
System.out.println("Height="+he+"width="+we);
in.readLine();
ou.write("P2");
ou.write("\n");
ou.write("#");
ou.write("Created by IrfanView");
ou.write("\n");
ou.write(he+" "+we);
ou.write("\n");
ou.write("255");
ou.write("\n");
String ligne=in.readLine();
ligne=in.readLine();
ligne=in.readLine();
ligne=in.readLine();
while(in.ready())
{
ligne=in.readLine();
StringTokenizer t=new StringTokenizer(ligne," ");
while(t.hasMoreTokens())
{
int val=Integer.parseInt(t.nextToken());
if(val<=se)
ou.write(0+" ");
else ou.write(255+" ");
}
}
JOptionPane.showMessageDialog(null,"OPERATION TERMINEE AVEC SUCCES ","SEUILLAGE BINAIRE",JOptionPane.INFORMATION_MESSAGE);
}
catch(IOException exc)
{
System.out.println(exc);
}
}
protected void imageConvolue()//on va utiliser le masque flou
{
BufferedImage imageFlou = new BufferedImage(monImage.getWidth(),monImage.getHeight(), monImage.getType());
float[ ] masqueFlou =
{
0.1f, 0.1f, 0.1f,
0.1f, 0.2f, 0.1f,
0.1f, 0.1f, 0.1f
};
Kernel masque = new Kernel(3, 3, masqueFlou);
ConvolveOp opération = new ConvolveOp(masque);
opération.filter(monImage, imageFlou);
monImage = imageFlou;
System.out.println("convolution effectuée");
repaint();
}
protected void imageEclaircie()
{
/*
* RescaleOp brillance = new RescaleOp(A, K, null);
* 1. A< 1, l’image devient plus sombre.
2. A > 1, l’image devient plus brillante.
3. K est compris entre 0 et 256 et ajoute un éclairement .
*/
BufferedImage imgBrillant = new BufferedImage(monImage.getWidth(), monImage.getHeight(), BufferedImage.TYPE_INT_RGB);
RescaleOp brillance = new RescaleOp(1.2f, 0, null);
brillance.filter(monImage, imgBrillant);
monImage = imgBrillant;
repaint();
}
protected void imageSombre()
{
/* RescaleOp assombrir = new RescaleOp(A, K, null);
*
* 1. A < 1, l’image devient plus sombre.
2. A > 1, l’image devient plus brillante.
3. K est compris entre 0 et 256 et ajoute un éclairement .
*
*/
BufferedImage imgSombre = new BufferedImage(monImage.getWidth(), monImage.getHeight(), BufferedImage.TYPE_INT_RGB);
RescaleOp assombrir = new RescaleOp(0.7f, 10, null);
assombrir.filter(monImage, imgSombre);
monImage = imgSombre;
System.out.println("assombrir effectuée");
repaint();
}
public void filtre(String fil)
{
try {
BufferedImage img=ImageIO.read(new File(fil));
int [][] pixel= new int[img.getWidth()][img.getHeight()];
int x,y,g;
//***************************************************
//Conversion enniveau du Gris
for (int i = 0; i < img.getWidth(); i++) {
for (int j = 0; j < img.getHeight(); j++) {
Color pixelcolor= new Color(img.getRGB(i,j));
int r=pixelcolor.getRed();
int gb=pixelcolor.getGreen();
int b=pixelcolor.getBlue();
int hy=(r+gb+b)/3;
int rgb=new Color(hy,hy,hy).getRGB();
// changer la couleur de pixel avec la nouvelle couleur inversée
img.setRGB(i, j, rgb);
}
}
//***************************************************
// parcourir les pixels de l'image
for (int i = 0; i < img.getWidth(); i++)
{
for (int j = 0; j < img.getHeight(); j++)
{
// recuperer couleur de chaque pixel
Color pixelcolor= new Color(img.getRGB(i, j));
// recuperer les valeur rgb (rouge ,vert ,bleu) de cette couleur
pixel[i][j]=img.getRGB(i, j);
}
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
for (int i = 1; i < img.getWidth()-2; i++)
{
for (int j = 1; j < img.getHeight()-2; j++)
{
x=(pixel[i][j+2]+2*pixel[i+1][j+2]+pixel[i+2][j+2])-(pixel[i][j]+2*pixel[i+1][j]+pixel[i+2][j]);
y = (pixel[i + 2][j] + 2 * pixel[i + 2][j + 1] + pixel[i + 2][j + 2]) - (pixel[i][j] + 2 * pixel[i][j + 1] + pixel[i][j + 2]);
g=Math.abs(x)+Math.abs(y);
//System.out.println(g);
pixel[i][j]=g;
}
}
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//**********************************************************************************
for (int i = 0; i < img.getWidth(); i++) {
for (int j = 0; j < img.getHeight(); j++) {
Color pixelcolor= new Color(pixel[i][j]);
int r=pixelcolor.getRed();
int gb=pixelcolor.getGreen();
int b=pixelcolor.getBlue();
int rgb=new Color(r,gb,b).getRGB();
// changer la couleur de pixel avec la nouvelle couleur inversée
img.setRGB(i, j, rgb);
}
}
// enregistrement d'image
ImageIO.write(img, "bmp",new File("Sobel.bmp")) ;//ImageIO.write()//;
}
catch (Exception e) {
System.err.println("erreur -> "+e.getMessage());
}
System.out.println("fin");
}
protected void imageBinaire()
{
BufferedImage imgBinaire = new BufferedImage(monImage.getWidth(), monImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
Graphics2D surfaceImg = imgBinaire.createGraphics();
surfaceImg.drawImage(monImage, null, null);
monImage = imgBinaire;
repaint();
}
protected void imageEnNiveauGris()
{
BufferedImage imageGris = new BufferedImage(monImage.getWidth(), monImage.getHeight(), BufferedImage.TYPE_USHORT_GRAY);
Graphics2D surfaceImg = imageGris.createGraphics();
surfaceImg.drawImage(monImage, null, null);
monImage = imageGris;
repaint();
}
protected void ajouterImage(File fichierImage)
{ // desiiner une image à l'ecran
try {
monImage = ImageIO.read(fichierImage);
} catch (IOException e) {
e.printStackTrace();
}
repaint();
}
protected BufferedImage getImagePanneau()
{ // récupérer une image du panneau
int width = this.getWidth();
int height = this.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
this.paintAll(g);
g.dispose();
return image;
}
protected void enregistrerImage(File fichierImage)
{
String format ="JPG";
BufferedImage image = getImagePanneau();
try {
ImageIO.write(image, format, fichierImage);
} catch (IOException e) {
e.printStackTrace();
}
}
}