@@ 1,7 1,3 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
package jones.andrew.imageviewer;
@@ 87,7 83,7 @@ public class Main extends JFrame {
boolean useImageIO = false;
- JImageReader imageFile = null;
+ JImageReader imageReader = null;
FileExtensionFilter pcxFilter = new FileExtensionFilter(new String[]{"pcx"}, "PCX Files (.pcx)");
FileExtensionFilter mspFilter = new FileExtensionFilter(new String[]{"msp"}, "Microsoft Paint files (.msp)");
@@ 150,18 146,18 @@ public class Main extends JFrame {
FileFilter selectedFilter = saveFileChooser.getFileFilter();
if (selectedFilter == bmpFilter) {
- new BMPReader().exportImage((BufferedImage)imageFile.getImage(), fileName);
+ new BMPReader().exportImage((BufferedImage)imageReader.getImage(), fileName);
}
else if (selectedFilter == godFilter) {
- new GodPaintReader(fileName).exportImage(imageFile.getImage(), fileName);
+ new GodPaintReader(fileName).exportImage(imageReader.getImage(), fileName);
}
//HACK
//TODO: experimental.
else if (fileName.endsWith(".tga")) {
- new TGAReader().exportImage((BufferedImage)imageFile.getImage(), fileName);
+ new TGAReader().exportImage((BufferedImage)imageReader.getImage(), fileName);
}
- else if (imageFile instanceof PCXReader) {
- PCXReader pcx = (PCXReader)imageFile;
+ else if (imageReader instanceof PCXReader) {
+ PCXReader pcx = (PCXReader)imageReader;
pcx.saveExistingPCX(fileName);
}
}
@@ 188,7 184,7 @@ public class Main extends JFrame {
logger.error("IOException when getting canonical path", e);
}
try {
- ImageIO.write(imageFile.getImage(), "png", new File(fileName));
+ ImageIO.write(imageReader.getImage(), "png", new File(fileName));
}
catch(IOException ex) {
logger.error("Error saving with ImageIO", ex);
@@ 230,9 226,9 @@ public class Main extends JFrame {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
- if (imageFile == null)
+ if (imageReader == null)
return;
- String metadata = imageFile.getMetadataSummary();
+ String metadata = imageReader.getMetadataSummary();
JOptionPane.showMessageDialog(null, metadata);
}
});
@@ 244,11 240,11 @@ public class Main extends JFrame {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
- if (imageFile == null)
+ if (imageReader == null)
return;
- int w = imageFile.getWidth()/2;
- int h = imageFile.getHeight()/2;
- Image newImage = imageFile.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
+ int w = imageReader.getWidth()/2;
+ int h = imageReader.getHeight()/2;
+ Image newImage = imageReader.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
pnlPCXViewer.setPreferredSize(new Dimension(w, h));
pnlPCXViewer.revalidate();
pnlPCXViewer.setImage(newImage);
@@ 263,11 259,11 @@ public class Main extends JFrame {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
- if (imageFile == null)
+ if (imageReader == null)
return;
- pnlPCXViewer.setPreferredSize(new Dimension(imageFile.getWidth(), imageFile.getHeight()));
+ pnlPCXViewer.setPreferredSize(new Dimension(imageReader.getWidth(), imageReader.getHeight()));
pnlPCXViewer.revalidate();
- pnlPCXViewer.setImage(imageFile.getImage());
+ pnlPCXViewer.setImage(imageReader.getImage());
Graphics gphx = pnlPCXViewer.getGraphics();
pnlPCXViewer.update(gphx);
gphx.dispose();
@@ 280,11 276,11 @@ public class Main extends JFrame {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
- if (imageFile == null)
+ if (imageReader == null)
return;
- int w = (int)(imageFile.getWidth()*1.5);
- int h = (int)(imageFile.getHeight()*1.5);
- Image newImage = imageFile.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
+ int w = (int)(imageReader.getWidth()*1.5);
+ int h = (int)(imageReader.getHeight()*1.5);
+ Image newImage = imageReader.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
pnlPCXViewer.setPreferredSize(new Dimension(w, h));
pnlPCXViewer.revalidate();
pnlPCXViewer.setImage(newImage);
@@ 300,11 296,11 @@ public class Main extends JFrame {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
- if (imageFile == null)
+ if (imageReader == null)
return;
- int w = imageFile.getWidth()*2;
- int h = imageFile.getHeight()*2;
- Image newImage = imageFile.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
+ int w = imageReader.getWidth()*2;
+ int h = imageReader.getHeight()*2;
+ Image newImage = imageReader.getImage().getScaledInstance(w, h, Image.SCALE_DEFAULT);
pnlPCXViewer.setPreferredSize(new Dimension(w, h));
pnlPCXViewer.revalidate();
pnlPCXViewer.setImage(newImage);
@@ 409,21 405,17 @@ public class Main extends JFrame {
try{
fileName = jFileChooser1.getSelectedFile().getCanonicalPath();
}
- catch(IOException e)
- {
+ catch(IOException e) {
logger.error("IOException when getting canonical path", e);
}
+ BufferedImage bi = null;
if (useImageIO) {
try {
- BufferedImage bi = ImageIO.read(new File(fileName));
+ bi = ImageIO.read(new File(fileName));
if (bi == null) {
JOptionPane.showMessageDialog(null, "The selected image could not be read.", "Could not read image", JOptionPane.ERROR_MESSAGE);
- }
- else {
- pnlPCXViewer.setPreferredSize(new Dimension(bi.getWidth(), bi.getHeight()));
- pnlPCXViewer.revalidate();
- pnlPCXViewer.setImage(bi);
+ throw new RuntimeException("boom!");
}
}
catch(IOException ex) {
@@ 431,45 423,18 @@ public class Main extends JFrame {
}
}
else {
- if (fileName.endsWith(".pcx") || fileName.endsWith(".PCX"))
- imageFile = new PCXReader(fileName);
- else if (fileName.endsWith(".msp") || fileName.endsWith(".MSP"))
- imageFile = new MSPReader(fileName);
- else if (fileName.endsWith(".ico") || fileName.endsWith(".ICO"))
- imageFile = new SunIconReader(fileName);
- else if (fileName.endsWith(".bmp") || fileName.endsWith(".BMP"))
- imageFile = new BMPReader(fileName);
- else if (fileName.endsWith(".tga") || fileName.endsWith(".TGA"))
- imageFile = new TGAReader(fileName);
- else if (fileName.endsWith(".jpg") || fileName.endsWith(".JPG"))
- imageFile = new JFIFReader(fileName);
- else if (fileName.endsWith(".god") || fileName.endsWith(".GOD"))
- imageFile = new GodPaintReader(fileName);
- else if (fileName.endsWith(".trp") || fileName.endsWith(".TRP"))
- imageFile = new EggPaintReader(fileName);
- else if (fileName.endsWith(".bld") || fileName.endsWith(".BLD"))
- imageFile = new MegaPaintBLDReader(fileName);
- else if (fileName.toLowerCase().endsWith(".cut"))
- imageFile = new DrHaloReader(fileName);
- else if (fileName.toLowerCase().endsWith(".epa"))
- imageFile = new AwardBIOSReader(fileName);
- else if (fileName.toLowerCase().endsWith(".tru"))
- imageFile = new IndyPaintReader(fileName);
- else if (fileName.toLowerCase().endsWith(".ftc"))
- imageFile = new FalconTrueColorReader(fileName);
+ getImageReaderByFileExtension(fileName);
try{
long now = System.nanoTime();
- imageFile.processFile();
+ imageReader.processFile();
long end = System.nanoTime();
System.out.println("Import time: " + (end - now)/1000000 + " ms");
}
- catch(IllegalDataException e)
- {
+ catch(IllegalDataException e) {
logger.error(e.getMessage(), e);
JOptionPane.showMessageDialog(null, "This is not a valid file. Details: " + e.getMessage());
}
- catch(UnsupportedVariantException e)
- {
+ catch(UnsupportedVariantException e) {
logger.error(e.getMessage(), e);
JOptionPane.showMessageDialog(null, "This type of file is not supported. Details: " + e.getMessage());
}
@@ 482,11 447,16 @@ public class Main extends JFrame {
);
throw new RuntimeException(ex);
}
- System.out.println(imageFile);
- pnlPCXViewer.setPreferredSize(new Dimension(imageFile.getWidth(), imageFile.getHeight()));
- pnlPCXViewer.revalidate();
- pnlPCXViewer.setImage(imageFile.getImage());
+ System.out.println(imageReader);
+ bi = imageReader.getImage();
}
+
+ pnlPCXViewer.setPreferredSize(new Dimension(bi.getWidth(), bi.getHeight()));
+ pnlPCXViewer.revalidate();
+ pnlPCXViewer.setImage(bi);
+
+ //Updating the graphics is necessary for the change to appear immediately
+ //Otherwise the old image (or part of it) may remain
Graphics gphx = pnlPCXViewer.getGraphics();
pnlPCXViewer.update(gphx);
gphx.dispose();
@@ 495,9 465,38 @@ public class Main extends JFrame {
}
}
+ private void getImageReaderByFileExtension(String fileName) {
+ if (fileName.endsWith(".pcx") || fileName.endsWith(".PCX"))
+ imageReader = new PCXReader(fileName);
+ else if (fileName.endsWith(".msp") || fileName.endsWith(".MSP"))
+ imageReader = new MSPReader(fileName);
+ else if (fileName.endsWith(".ico") || fileName.endsWith(".ICO"))
+ imageReader = new SunIconReader(fileName);
+ else if (fileName.endsWith(".bmp") || fileName.endsWith(".BMP"))
+ imageReader = new BMPReader(fileName);
+ else if (fileName.endsWith(".tga") || fileName.endsWith(".TGA"))
+ imageReader = new TGAReader(fileName);
+ else if (fileName.endsWith(".jpg") || fileName.endsWith(".JPG"))
+ imageReader = new JFIFReader(fileName);
+ else if (fileName.endsWith(".god") || fileName.endsWith(".GOD"))
+ imageReader = new GodPaintReader(fileName);
+ else if (fileName.endsWith(".trp") || fileName.endsWith(".TRP"))
+ imageReader = new EggPaintReader(fileName);
+ else if (fileName.endsWith(".bld") || fileName.endsWith(".BLD"))
+ imageReader = new MegaPaintBLDReader(fileName);
+ else if (fileName.toLowerCase().endsWith(".cut"))
+ imageReader = new DrHaloReader(fileName);
+ else if (fileName.toLowerCase().endsWith(".epa"))
+ imageReader = new AwardBIOSReader(fileName);
+ else if (fileName.toLowerCase().endsWith(".tru"))
+ imageReader = new IndyPaintReader(fileName);
+ else if (fileName.toLowerCase().endsWith(".ftc"))
+ imageReader = new FalconTrueColorReader(fileName);
+ }
+
private void customZoomAction()
{
- if (imageFile == null)
+ if (imageReader == null)
return;
double zoomLevel;
final JDialog howMuch = new JDialog(this);
@@ 541,9 540,9 @@ public class Main extends JFrame {
zoomLevel = zoomPercent/100.0;
- int w = (int)(imageFile.getWidth()*zoomLevel);
- int h = (int)(imageFile.getHeight()*zoomLevel);
- Image newImage = imageFile.getImage().getScaledInstance(w, h, Image.SCALE_SMOOTH);
+ int w = (int)(imageReader.getWidth()*zoomLevel);
+ int h = (int)(imageReader.getHeight()*zoomLevel);
+ Image newImage = imageReader.getImage().getScaledInstance(w, h, Image.SCALE_SMOOTH);
pnlPCXViewer.setPreferredSize(new Dimension(w, h));
pnlPCXViewer.revalidate();
pnlPCXViewer.setImage(newImage);