我设置了一个JLabel,放置图片,但是图片尺寸太大,怎样让它适合组件大小?
解决方案 »
- 请教下session.getServletContext()和getServletContext()问题?
- Servlet基础
- java基础类库和核心类库有什么区别?
- 高手来帮觖决一上字符替换问题?
- 请教时间类的写法
- 如何编程读取PKCS#12格式的证书与私钥
- Iterator如何最方便的取得Size
- 在se中如何将某个文件夹下面的所有文件都以abc0,abc1,abc2的方式命名
- 急,简单,在线等。关于文件下载的链接
- 如何将unicode的字符转换为ascii型的字符?
- 关于com.sun打头的这些包的一个问题
- Java监控键盘的程序啊~但是我不知道为什么我输入一个子母,总是重复出来一个!比如输入a就出来aa,有原码
然后用BufferedImage对图片进行缩放变换之后再设置到JLabel上
你可以用这个方法试试:
/**
* 将指定的BufferedImage,缩放为{width,height}的大小,并返回一个新的BufferedImage
* @param bufImage
* @param width
* @param height
* @return
*/
public static BufferedImage resizeBuff(BufferedImage bufImage, int width, int height) {
AffineTransform transform = AffineTransform.getScaleInstance(
(double)width/(double)bufImage.getWidth(),
(double)height/(double)bufImage.getHeight());
AffineTransformOp op = new AffineTransformOp(transform,
AffineTransformOp.TYPE_BILINEAR);
return op.filter(bufImage, null);
}
我给的这个方式,已经是我知道的失真最小的方式了,
但是依然没有专业的图片编辑软件处理的效果好
另外一点就是BufferedImage有点耗资源,不过图片不大的话也无所谓了
ImageIcon ico=new ImageIcon(file);
Image temp=ico.getImage().getScaledInstance(com.getWidth(),com.getHeight(),ico.getImage().SCALE_DEFAULT);
ico=new ImageIcon(temp);
com.setIcon(ico);
}
可以将JButton 换成任何支持图标的控件
但是如果不追求这么一点清晰度的话,其实也无所谓
真正追求图片展现的完美,还是应该用图片编辑软件处理成预期大小,不要用java来缩放