ImageFrame.javaimport java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import java.net.URL;
public class ImageFrame extends JFrame {
BufferedImage img;
String title;
double scl;
public ImageFrame(BufferedImage img, String title) {
this.img = img;
setup(title);
}
public ImageFrame(String filename) {
File f = new File(filename);
if (f.exists()) readImage(filename);
else {
URL imageSrc = getClass().getResource(filename);
if (imageSrc!=null) readImage(imageSrc);
else {
System.out.println("file not found: " + filename);
System.exit(-1);
}
}
setup(filename);
}
public ImageFrame(File f) {
readImage(f);
setup(f.getName());
}
public void setMag(int mag) {
scl = mag;
repaint();
}
static JFileChooser fc = new JFileChooser(System.getProperty("user.dir"));
static File choose_image() {
fc.setAcceptAllFileFilterUsed(false);
fc.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
fc.setAcceptAllFileFilterUsed(true);
int result = fc.showOpenDialog(null);
if (result== JFileChooser.APPROVE_OPTION)
return fc.getSelectedFile();
else return null;
}
public int getImageHeight() {
return img.getHeight();
}
private void setup(String title) {
setScale();
this.title = title;
setTitle(title);
add(new ImagePanel());
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public void setScale()
{
int w = img.getWidth();
int h = img.getHeight();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dim = toolkit.getScreenSize();
//System.out.format("screen size: %d x %d %n",dim.width,dim.height);
//System.out.format("image size %d x %d%n",w,h);
scl = 1.0;
if (w<128) {
scl = (double) 128/w;
}
else {
scl = Math.min((double) (dim.width-200)/w, (double) (dim.height-200)/h);
if (scl>1.0) scl = 1.0;
}
}
public void info() {
System.out.println("Image: " + title);
System.out.format("size: %d x %d%n",img.getWidth(),img.getHeight());
if (scl!=1.0) System.out.format("scale %g%n",scl);
}
public void readImage(URL src) {
try {
img = ImageIO.read(src);
} catch (IOException e) {
System.out.println(e.getMessage());
System.exit(-1);
}
}
public void readImage(File f) {
try {
img = ImageIO.read(f);
} catch (IOException e) {
System.out.println(e.getMessage());
System.exit(-1);
}
}
public void readImage(String filename) {
try {
img = ImageIO.read(new File(filename));
} catch (IOException e) {
//System.out.println(e); // e.getMessage());
System.out.println(filename + " not found");
System.exit(-1);
}
}
public void writeImage(String filename) {
writeImage(filename,"jpg");
}
public void writeImage(String filename, String format) {
File file = new File(filename + "." + format);
try {
ImageIO.write(img, format, file);
} catch (IOException e) {
System.out.println("image write failed");
System.out.println(e);
System.exit(-1);
}
}
public Dimension getPreferredSize() {
int w,h;
w = h = 100;
if (img != null) {
w = (int) (scl*img.getWidth())+16;
h = (int) (scl*img.getHeight())+38;
}
//System.out.format("preferred size: %d x %d%n",w,h);
return new Dimension(w,h);
}
class ImagePanel extends JPanel {
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g2);
if (scl==1.0) g2.drawImage(img, 0, 0, null);
else g2.drawImage(img, AffineTransform.getScaleInstance(scl, scl), null);
}
}
public static void main(String[] args) {
String filename = "robin2.jpg";
ImageFrame f1 = null;
JFileChooser fc = new JFileChooser(System.getProperty("user.dir"));
if (args.length>0) {
filename = args[0];
f1 = new ImageFrame(filename);
}
else {
File f = ImageFrame.choose_image();
if (f!=null) f1 = new ImageFrame(f);
else f1 = new ImageFrame(filename);
}
f1.info();
f1.setLocation(100,100);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Maintained by John Loomis, updated Mon Mar 04 12:56:39 2019