我之前有个源码丢失了,反编译后是这样子的。
大致就是先通过 Java Advanced Image IO (JAI, 在 Oracle 上下载) 把图片读取到内存,然后缩放后设置成 ImageIcon 显示到一个 Panel 上。直接让 Swing 自己读取图片时好像不会自动缩放的。
FileInputStream input = new FileInputStream(path);
BufferedImage image = ImageIO.read(input);
image = scale(image, width, max);
ProductFrame.this.setIcon(new ImageIcon(image));
private BufferedImage scale(BufferedImage image, int from, int to)
{
if(from > to)
{
double scale = (double)to / (double)from;
ParameterBlock pb = new ParameterBlock();
pb.addSource(image);
pb.add(scale);
pb.add(scale);
pb.add(0.0D);
pb.add(0.0D);
RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
RenderedOp resizedImage = JAI.create("SubsampleAverage", image, Double.valueOf(scale), Double.valueOf(scale), qualityHints);
return resizedImage.getAsBufferedImage();
} else
{
return image;
}
}