How to resize the canvas?
Hi,
I am using the following code to scale images. However, I would like
the final image to be of the size 280 x 400 by adding white space
(resizing the canvas). How do I do that?
ImageJ has a very nice plugin to resize the canvas and place the pic
relative to the top left corner, I am looking for something similar.
Thanks
Rauf
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
publicclass ImageScaler{
finalstaticint IMAGE_TYPE = BufferedImage.TYPE_BYTE_INDEXED;
privatefinalstatic Integer nH =new Integer(400);
privatefinalstatic Integer nW =new Integer(280);
publicstaticvoid main(String[] args)throws IOException{
BufferedImage source = getSourceImage();
BufferedImage scaled = toBufferedImage(getScaledImage(source, nW, nH));
ImageIO.write(scaled,"jpeg",new File("t2_scaled.jpeg"));
}
static BufferedImage getSourceImage(){
try{
BufferedImage image = ImageIO.read(new File("t2.jpg"));
return image;
}catch (IOException io){
System.out.println("Exception caught: " + io);
returnnull;
}
}
publicstatic Image getScaledImage(BufferedImage source,int width,int height){
Integer H =new Integer(source.getHeight());
Integer W =new Integer(source.getWidth());
double scaleFactor = H.doubleValue() / nH.doubleValue();
System.out.println("Scale factor: " + scaleFactor);
if (W.doubleValue() / scaleFactor > nW.doubleValue()){
scaleFactor = W.doubleValue() / nW.doubleValue();
System.out.println("New scale factor: " + scaleFactor);
}
int newWidth = (int) ((double)source.getWidth() / scaleFactor);
int newHeight = (int) ((double)source.getHeight() / scaleFactor);
return source.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
}
publicstatic BufferedImage toBufferedImage(Image image){
new ImageIcon(image);//load image
int w = image.getWidth(null);
int h = image.getHeight(null);
BufferedImage bimage =new BufferedImage(w, h, IMAGE_TYPE);
Graphics2D g = bimage.createGraphics();
g.drawImage(image, 0, 0,null);
g.dispose();
return bimage;
}
}

