Ho volutamente omesso la parte dell'output a file, comunque, per tenere le cose semplici:
codice:
BufferedImage image = new BufferedImage(current.getWidth(), current.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = image.createGraphics();
g.drawRenderedImage(current, null);
g.dispose();
return image;
brano di un ipotetico codice che, avendo a disposizione un BufferedImage (current) creato a partire dall'immagine originale, ritorna un BufferedImage rappresentazione di current in b&w
In due righe, per contestualizzare un po' quel pezzo di codice:
codice:
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
/**
*
* @author Andrea
*/
public class ImageFilters {
private BufferedImage current;
public BufferedImage toBlackAndWhite(String fileName) {
if (current == null) {
throw new RuntimeException("Couldn't create src BufferedImage");
}
if (fileName == null) {
//No output to File;
BufferedImage image = new BufferedImage(current.getWidth(), current.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = image.createGraphics();
g.drawRenderedImage(current, null);
g.dispose();
return image;
}
//da implementare l'eventuale output a file
return null;
}
public ImageFilters(String fileName) {
try {
current = ImageIO.read(new File(fileName));
}
catch (Exception e) {
e.printStackTrace();
current = null;
}
}
//main per test
public static void main (String[] args) {
JFrame frame = new JFrame("Test");
ImageFilters imgF = new ImageFilters("C:/Documents and Settings/Andrea/Desktop/nemo.jpg");
JLabel lab = new JLabel(new ImageIcon(imgF.toBlackAndWhite(null)));
frame.getContentPane().add(lab);
frame.setSize(lab.getIcon().getIconWidth(),lab.getIcon().getIconHeight());
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}