我有一个动画.GIF
图像,我想在java中调整大小,但在尝试使用传统方法时,它似乎不起作用:
ImageIcon esclamativoMid = null;
//... search my file...
if(name.equalsIgnoreCase("esclamativo.gif"))
esclamativoMid = new ImageIcon(f.getAbsolutePath());
myEnumMap.put(Resolution.MID, esclamativoMid);
for(Resolution r: Resolution.values()){
if(r != Resolution.MID){
int w = esclamativoMid.getIconWidth()*(r.ordinal()+1)/2;
int h = esclamativoMid.getIconHeight()*(r.ordinal()+1)/2;
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D)bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(esclamativoMid.getImage(), 0, 0, w, h, null);
myEnumMap.put(r, new ImageIcon(bi));
}
}
当我尝试使用该代码显示图像时:
new JLabel(myEnumMap.get(currentRes));
仅当.GIF
(I.E.图像直接从文件加载)时,我才会得到Resolution.MID
。
答案 0 :(得分:1)
有一个简单的Java图像缩放库,名为imgscalr。
图书馆实现了一些不同的图像缩放方法,如果您要求它,可以为您选择最佳方法,或者为您提供最快或最好看的方法(如果您要求的话)。
用法很简单,只是一堆静态方法。最简单的用例是:
BufferedImage scaledImage = Scalr.resize(myImage, 200);
所有操作都保持图像的原始比例,因此在这种情况下,您要求imgscalr在200像素宽和200像素高的范围内重新调整图像大小,默认情况下它会自动选择最佳且最快的方法因为它没有被指定。