我需要渲染一大堆(3240x3240)的东西。我如何绘制此图像以使其缩放到合理的大小?我是双缓冲。
更新方法:
super.update(g);
//Verify image exists
if (doubleBufferImage == null){
doubleBufferImage = createImage(this.getSize().width, this.getSize().height);
doubleBufferGraphics = doubleBufferImage.getGraphics();
}
//Update Bufer Image
doubleBufferGraphics.setColor(getBackground());
doubleBufferGraphics.fillRect(0, 0, this.getSize().width, this.getSize().height);
doubleBufferGraphics.setColor(getForeground());
paint(doubleBufferGraphics);
g.drawImage(doubleBufferImage, x, y, this.getSize().width, this.getSize().height, this);
答案 0 :(得分:0)
示例代码可以在Java Demos
看到/*
This method is inherited to BufferedImage class from java.awt.Image class
public Image getScaledInstance(int width,int height,int hints);
*/
import javax.imageio.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
class ResizeImage
{
public static void main(String args[]) throws Exception
{
// The first argument is the input file
String file=args[0];
// Take the output file
String output=args[1];
// Without extension? Go back
if(!output.contains(".")) return;
// Take the width,height as 2,3 args
int w=Integer.parseInt(args[2]);
int h=Integer.parseInt(args[3]);
// Get the BufferedImage object by reading the image
// from the given input stream
BufferedImage bim=ImageIO.read(new FileInputStream(file));
// I am using fast scaling
Image resizedImg=bim.getScaledInstance(w,h,Image.SCALE_FAST);
// Create a BufferedImage object of w,h width and height
// and of the bim type
BufferedImage rBimg=new BufferedImage(w,h,bim.getType());
// Create Graphics object
Graphics2D g=rBimg.createGraphics();
// Draw the resizedImg from 0,0 with no ImageObserver
g.drawImage(resizedImg,0,0,null);
// Dispose the Graphics object, we no longer need it
g.dispose();
// Now, what? Just write to another file
// The first argument is the resized image object
// The second argument is the image file type, So i got the
// extension of the output file and passed it
// The next argument is the FileOutputStream to where the resized
// image is to be written.
ImageIO.write(rBimg,output.substring(output.indexOf(".")+1),new FileOutputStream(output));
}
}