*/
package jalview.util;
-import jalview.io.JalviewFileChooser;
-
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import org.jfree.graphics2d.svg.SVGHints;
import org.jibble.epsgraphics.EpsGraphics2D;
+import jalview.io.JalviewFileChooser;
+
public class ImageMaker
{
public static final String SVG_DESCRIPTION = "Scalable Vector Graphics";
* @param file
* @param fileTitle
* @param useLineart
+ * @param bitmapscale
* @throws IOException
*/
- public ImageMaker(TYPE imageType, int width, int height,
- File file, String fileTitle, boolean useLineart)
- throws IOException
+ public ImageMaker(TYPE imageType, int width, int height, File file,
+ String fileTitle, boolean useLineart, float bitmapscale,
+ int bitmapwidth, int bitmapheight) throws IOException
{
this.type = imageType;
out = new FileOutputStream(file);
- if (imageType == TYPE.SVG)
+ switch (imageType)
{
+ case SVG:
setupSVG(width, height, useLineart);
- }
- else if (imageType == TYPE.EPS)
- {
+ break;
+ case EPS:
setupEPS(width, height, fileTitle, useLineart);
- }
- else if (imageType == TYPE.PNG)
- {
- setupPNG(width, height);
+ break;
+ case PNG:
+ setupPNG(width, height, bitmapscale, bitmapwidth, bitmapheight);
+ break;
+ default:
}
}
*
* @param width
* @param height
+ * @param scale
*/
- protected void setupPNG(int width, int height)
+ protected void setupPNG(int width, int height, float scale,
+ int bitmapwidth, int bitmapheight)
{
- bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+ if (width == 0 || height == 0)
+ return;
+
+ float usescale = 0.0f;
+ int usewidth = width;
+ int useheight = height;
+
+ // use the smallest positive scale (i.e. fit in the box)
+ if (scale > 0.0f)
+ {
+ usescale = scale;
+ usewidth = Math.round(scale * width);
+ useheight = Math.round(scale * height);
+ }
+ if (bitmapwidth > 0)
+ {
+ float wscale = (float) bitmapwidth / width;
+ if (wscale > 0.0f && (usescale == 0.0f || wscale < usescale))
+ {
+ usescale = wscale;
+ usewidth = bitmapwidth;
+ useheight = Math.round(usescale * height);
+ }
+ }
+ if (bitmapheight > 0)
+ {
+ float hscale = (float) bitmapheight / height;
+ if (hscale > 0.0f && (usescale == 0.0f || hscale < usescale))
+ {
+ usescale = hscale;
+ usewidth = Math.round(usescale * width);
+ useheight = bitmapheight;
+ }
+ }
+ bi = new BufferedImage(usewidth, useheight, BufferedImage.TYPE_INT_RGB);
graphics = bi.getGraphics();
Graphics2D ig2 = (Graphics2D) graphics;
ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
+ if (usescale > 0.0f)
+ ig2.scale(usescale, usescale);
}
/**