本文主要是介绍Java实现图片的放缩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
缩放图片是一款图像处理软件必备的功能 , 哪么如何在Java中得以实现呢?
也许有些高手可能知道使用像素点缩放来实现 , 可惜这种方式比较麻烦些 , 下面我介绍一种更加简单的方式 :
前段时间研究java的绘图机制的时候 , 了解到Graphics中drawImage()方法是可以实现相应的图片缩放 ,
下面我们看看api的详述:(红色字体)
public abstract boolean drawImage(Image img,int x,int y,int width,int height,ImageObserver observer)
- 绘制指定图像中已缩放到适合指定矩形内部的图像。
图像绘制在此图形上下文坐标空间的指定矩形内部,如果需要,则进行缩放
img
- 要绘制的指定图像。如果 img
为 null,则此方法不执行任何操作。 x
- x 坐标。 y
- y 坐标。 width
- 矩形的宽度。 height
- 矩形的高度。 observer
- 转换了更多图像时要通知的对象。
那么也就是说 : 对参数width和height做相应的修改就能简单的实现图片的缩放功能
下面进入代码阶段:
- import java.awt.Toolkit;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.ImageIcon;
- import java.awt.event.MouseWheelEvent;
- import java.awt.event.MouseWheelListener;
- public class ZoomImage extends JFrame{
- private ZoomPanel zp;
- public ZoomImage() {
- //获取屏幕大小
- Dimension frameSize = Toolkit.getDefaultToolkit().getScreenSize();
- frameSize.width = frameSize.width / 2;
- frameSize.height = frameSize.height * 3 / 4;
- setSize(frameSize);
- setLocationRelativeTo(null);//居中显示
- zp = new ZoomPanel(frameSize, "1.jpg");
- getContentPane().add(zp);
- //添加鼠标滚轮消息响应
- addMouseWheelListener(new MouseWheelListener(){
- public void mouseWheelMoved(MouseWheelEvent e){
- //滚轮向前滑动 放大
- if(e.getWheelRotation() < 0){
- zp.enlargeImg();
- }
- //滚轮向后滑动 缩小
- else{
- zp.reduceImg();
- }
- }
- });
- setUndecorated(true);//去掉修饰框 这样的显示效果更佳
- setDefaultCloseOperation(3);
- setResizable(false);
- setVisible(true);
- }
- public static void main(String[] args) {
- new ZoomImage();
- }
- }
- //缩放面板
- class ZoomPanel extends JPanel {
- private ImageIcon ii;
- private Dimension frameSize;
- private int x, y, width, height;//图片的坐标、缩放的size
- public ZoomPanel(Dimension fs, String imgPath) {
- setBackground(Color.WHITE);
- this.frameSize = fs;
- ii = new ImageIcon(imgPath);
- width = ii.getIconWidth();
- height = ii.getIconHeight();
- setImgPos();
- }
- //设定x、y坐标
- public void setImgPos() {
- x = (frameSize.width - width) / 2;
- y = (frameSize.height - height) / 2;
- }
- //放大
- public void enlargeImg(){
- if(width >= ii.getIconWidth() * 2){
- return;
- }
- if(height >= ii.getIconHeight() * 2){
- return;
- }
- width += width / 9; //这里为什么是除以9呢 这个是数学问题 留给大家自己想吧 要是不明白,可以留言
- height += height / 9;
- setImgPos();
- repaint();
- }
- //缩小
- public void reduceImg(){
- if(width <= ii.getIconWidth() / 5){
- return;
- }
- if(height <= ii.getIconHeight() / 5){
- return;
- }
- width -= width / 10;
- height -= height / 10;
- setImgPos();
- repaint();
- }
- //重绘
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.drawImage(ii.getImage(), x, y, width, height, null);
- }
- }
运行效果 :
这篇关于Java实现图片的放缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!