package ip.j2d;
import graphics.ImageUtils;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.io.File;
public class ImagePanel extends JPanel {
private BufferedImage bufferedDisplayImage; private BufferedImage bufferedOriginalImageCopy; private Image image;
public ImagePanel(File f) {
setImage(ImageUtils.open(f));
ImageUtils.waitForImage(this,getImage());
setBufferedOriginalImageCopy(makeBlankBufferedImage(getImage().getWidth(null),getImage().getHeight(null)));
setBufferedDisplayImage(getBufferedOriginalImageCopy());
Graphics2D graphics = getBufferedDisplayImage().createGraphics();
graphics.drawImage(getImage(), null, null);
}
public static BufferedImage makeBlankBufferedImage(int w, int h) {
return new BufferedImage(w,
h, BufferedImage.TYPE_INT_RGB);
}
public void applyFilter(BufferedImageProcess filter) {
setBufferedDisplayImage(filter.process(getBufferedDisplayImage()));
repaint();
}
public void displayOriginalImage() {
setBufferedDisplayImage(makeBlankBufferedImage(getImage().getWidth(this),getImage().getHeight(this)));
Graphics2D graphics = getBufferedDisplayImage().createGraphics();
graphics.drawImage(getBufferedOriginalImageCopy(), null, null);
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D graphics = (Graphics2D) g;
graphics.drawImage(getBufferedDisplayImage(), 0, 0, null);
}
public Dimension getPreferredSize() {
return new Dimension(getBufferedDisplayImage().getWidth(),
getBufferedDisplayImage().getHeight());
}
public Dimension getMinimumSize() {
return getPreferredSize();
}
public BufferedImage getBufferedDisplayImage() {
return bufferedDisplayImage;
}
public void setBufferedDisplayImage(BufferedImage bufferedDisplayImage) {
this.bufferedDisplayImage = bufferedDisplayImage;
}
public BufferedImage getBufferedOriginalImageCopy() {
return bufferedOriginalImageCopy;
}
public void setBufferedOriginalImageCopy(BufferedImage bufferedOriginalImageCopy) {
this.bufferedOriginalImageCopy = bufferedOriginalImageCopy;
}
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
}