Javase中要显示一个图片,但是图片尺寸太大了,如何让图片能完全显示在规定区域内
1个回答
展开全部
我之前有个源码丢失了,反编译后是这样子的。
大致就是先通过 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;
}
}
更多追问追答
追问
能告诉一下你的qq吗,我的是4 7 4 7 0 9 9 8 7
追答
你下载个 JAI (Java Advanced Image) 的 API,这是 Oracle 的官方下载 API (以前 Sun 提供的),里面有 ImageIO.read() 能读取图片到内存中的 BufferedImage 对象,之后用 scale 方法缩放就得到一个新的 BufferedImage,最后把它 myFrame.setIcon() 用上去就行了,这里 myFrame 可以是其它的像 Panel, Button 等支持 setIcon () 方法的组件。
scale(BufferedImage image, int from, int to) 这个方法就是把一个图片从原来的 from 宽度缩小成 to 宽度 (当然也可能是从 from 的高度缩小成 to 高度),这里面的缩放的等比例的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询