/* Attend jusqu'àl'image se charge complètement */
public void waitUntilImageIsLoaded() {
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try {
tracker.waitForAll();
}
catch (InterruptedException ie) {
ie.printStackTrace();
}
// Prendre la dimension de l'image
this.setSize(getImageDimension());
}
/* Adapte les dimensions du panel aux dimensions de l'image */
public void adaptSize() {
this.setSize(getImageDimension());
this.setBorder(new javax.swing.border.TitledBorder(""));
}
/* Retourne les dimensions de l'image */
public Dimension getImageDimension() {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
/* Transformer l'image en niveaux de gris */
public void turnToGray() {
Dimension dim = getImageDimension();
BufferedImage b = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g = b.createGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
bi = b;
img = b;
repaint();
}
/* Applique un filtre passe-haut */
public void highPass() {
Dimension dim = getImageDimension();
BufferedImage source = toBufferedImage();
BufferedImage dest = (BufferedImage)this.createImage(dim.width-2, dim.height-2);
for (int i=0; i<dim.width; i++) {
for (int j=0; j<dim.height; j++) {
// Calcul du niveau de gris
int rgb = bi.getRGB(i, j);
int red = (rgb >> 16) & 0xFF;
int blue = (rgb >> 8) & 0xFF;
int green = rgb & 0xFF;
int gray = ((red * 299) + green * 587 + blue * 114) / 1000;
// Test avec la valeur du seuil
if (gray > 0) {
bi.setRGB(i, j, new Color(255, 255, 255).getRGB());
}
else {
bi.setRGB(i, j, new Color(0, 0, 0).getRGB());
}
}
}
img = bi;
repaint();
}
/* Retourne le niveau du gris du pixel */
protected int getGray(int i, int j) {
// Calcul du niveau de gris
int rgb = bi.getRGB(i, j);
int red = (rgb >> 16) & 0xFF;
int blue = (rgb >> 8) & 0xFF;
int green = rgb & 0xFF;
return (red * 299 + green * 587 + blue * 114) / 1000;
}
/* Retourne vrai si le pixel est blanc */
public boolean isWhite(int i, int j) {
if (getGray(i, j) > 0) {
return true;
}
else {
return false;
}
}
/* Enregistre l'image */
public void saveAsJPEG(String filename) {
Dimension size = this.getSize();
BufferedImage myImage = new BufferedImage(size.width, size.height,BufferedImage.TYPE_INT_RGB);
Graphics2D graph = myImage.createGraphics();
this.paint(graph);
try {
OutputStream out = new FileOutputStream(filename);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(myImage);
out.close();
}
catch (Exception e) {
throw new UnsupportedOperationException("Couldn't save choices image..");
}
}