diff --git a/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java b/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java index 736dbe6485a4882e7bb910673a3a3f809dedb98d..5fb291aa1556f10dec99173755a06347a2aeae04 100644 --- a/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java +++ b/xchart/src/main/java/com/xeiam/xchart/BitmapEncoder.java @@ -53,6 +53,23 @@ public final class BitmapEncoder { public enum BitmapFormat { PNG, JPG, BMP, GIF; } + + /** + * Only adds the extension of the BitmapFormat to the filename if the filename doesn't already have it. + * + * @param fileName + * @param bitmapFormat + * @return filename (if extension already exists), otherwise;: filename + "." + extension + */ + public static String addFileExtension(String fileName, BitmapFormat bitmapFormat) { + String fileNameWithFileExtension = fileName; + final String newFileExtension = "." + bitmapFormat.toString().toLowerCase(); + if (fileName.length() <= newFileExtension.length() || + !fileName.substring(fileName.length()-newFileExtension.length(), fileName.length()).equalsIgnoreCase(newFileExtension)) { + fileNameWithFileExtension = fileName + newFileExtension; + } + return fileNameWithFileExtension; + } /** * Save a Chart as an image file @@ -66,7 +83,7 @@ public final class BitmapEncoder { BufferedImage bufferedImage = getBufferedImage(chart); - OutputStream out = new FileOutputStream(fileName + "." + bitmapFormat.toString().toLowerCase()); + OutputStream out = new FileOutputStream(addFileExtension(fileName, bitmapFormat)); ImageIO.write(bufferedImage, bitmapFormat.toString().toLowerCase(), out); out.close(); } @@ -108,7 +125,7 @@ public final class BitmapEncoder { setDPI(metadata, DPI); - File file = new File(fileName + "." + bitmapFormat.toString().toLowerCase()); + File file = new File(addFileExtension(fileName, bitmapFormat)); FileImageOutputStream output = new FileImageOutputStream(file); writer.setOutput(output); IIOImage image = new IIOImage(bufferedImage, null, metadata); @@ -150,6 +167,7 @@ public final class BitmapEncoder { * * @param chart * @param fileName + * @param bitmapFormat * @param quality - a float between 0 and 1 (1 = maximum quality) * @throws FileNotFoundException * @throws IOException diff --git a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java index 32601ab995b6bcd9a0e79002baa7d4c6416ebd6a..1948c7de9cc043a39dd6bc797d52e811aac1676b 100644 --- a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java +++ b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java @@ -130,7 +130,7 @@ public class XChartPanel extends JPanel { if (fileChooser.getFileFilter() == null) { BitmapEncoder.saveBitmap(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.PNG); } else if (fileChooser.getFileFilter().getDescription().equals("*.jpg,*.JPG")) { - BitmapEncoder.saveJPGWithQuality(chart, theFileToSave.getCanonicalPath().toString() + ".jpg", 1.0f); + BitmapEncoder.saveJPGWithQuality(chart, BitmapEncoder.addFileExtension(theFileToSave.getCanonicalPath().toString(), BitmapFormat.JPG), 1.0f); } else if (fileChooser.getFileFilter().getDescription().equals("*.png,*.PNG")) { BitmapEncoder.saveBitmap(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.PNG); } else if (fileChooser.getFileFilter().getDescription().equals("*.bmp,*.BMP")) {