Java实现图片的放缩

2024-06-07 01:32
文章标签 java 实现 图片 放缩

本文主要是介绍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做相应的修改就能简单的实现图片的缩放功能

 

下面进入代码阶段:

[java]  view plain copy print ?
  1. import java.awt.Toolkit;  
  2. import java.awt.Dimension;  
  3. import java.awt.Graphics;  
  4. import javax.swing.JFrame;  
  5. import javax.swing.JPanel;  
  6. import javax.swing.ImageIcon;  
  7. import java.awt.event.MouseWheelEvent;  
  8. import java.awt.event.MouseWheelListener;  
  9.   
  10. public class ZoomImage extends JFrame{  
  11.     private ZoomPanel zp;  
  12.   
  13.     public ZoomImage() {  
  14.         //获取屏幕大小  
  15.         Dimension frameSize = Toolkit.getDefaultToolkit().getScreenSize();  
  16.         frameSize.width = frameSize.width / 2;  
  17.         frameSize.height = frameSize.height * 3 / 4;  
  18.           
  19.         setSize(frameSize);  
  20.         setLocationRelativeTo(null);//居中显示  
  21.           
  22.         zp = new ZoomPanel(frameSize, "1.jpg");  
  23.         getContentPane().add(zp);  
  24.           
  25.         //添加鼠标滚轮消息响应  
  26.         addMouseWheelListener(new MouseWheelListener(){  
  27.             public void mouseWheelMoved(MouseWheelEvent e){  
  28.                   
  29.                 //滚轮向前滑动  放大  
  30.                 if(e.getWheelRotation() < 0){  
  31.                     zp.enlargeImg();  
  32.                 }  
  33.                   
  34.                 //滚轮向后滑动  缩小  
  35.                 else{  
  36.                     zp.reduceImg();  
  37.                 }  
  38.             }  
  39.         });  
  40.           
  41.         setUndecorated(true);//去掉修饰框  这样的显示效果更佳  
  42.         setDefaultCloseOperation(3);  
  43.         setResizable(false);  
  44.         setVisible(true);  
  45.     }  
  46.   
  47.     public static void main(String[] args) {  
  48.         new ZoomImage();  
  49.     }  
  50. }  
  51.   
  52. //缩放面板  
  53. class ZoomPanel extends JPanel {  
  54.     private ImageIcon ii;  
  55.     private Dimension frameSize;  
  56.     private int x, y, width, height;//图片的坐标、缩放的size  
  57.   
  58.     public ZoomPanel(Dimension fs, String imgPath) {  
  59.         setBackground(Color.WHITE);  
  60.           
  61.         this.frameSize = fs;  
  62.   
  63.         ii = new ImageIcon(imgPath);  
  64.   
  65.         width = ii.getIconWidth();  
  66.         height = ii.getIconHeight();  
  67.           
  68.         setImgPos();  
  69.     }  
  70.       
  71.     //设定x、y坐标  
  72.     public void setImgPos() {  
  73.         x = (frameSize.width - width) / 2;  
  74.         y = (frameSize.height - height) / 2;  
  75.     }  
  76.       
  77.     //放大  
  78.     public void enlargeImg(){  
  79.         if(width >= ii.getIconWidth() * 2){  
  80.             return;  
  81.         }  
  82.         if(height >= ii.getIconHeight() * 2){  
  83.             return;  
  84.         }  
  85.           
  86.         width += width / 9//这里为什么是除以9呢  这个是数学问题  留给大家自己想吧  要是不明白,可以留言  
  87.         height += height / 9;  
  88.         setImgPos();  
  89.           
  90.         repaint();  
  91.     }     
  92.       
  93.     //缩小  
  94.     public void reduceImg(){  
  95.         if(width <= ii.getIconWidth() / 5){  
  96.             return;  
  97.         }  
  98.         if(height <= ii.getIconHeight() / 5){  
  99.             return;  
  100.         }  
  101.           
  102.         width -= width / 10;  
  103.         height -= height / 10;  
  104.         setImgPos();  
  105.           
  106.         repaint();  
  107.     }  
  108.       
  109.     //重绘  
  110.     public void paintComponent(Graphics g) {  
  111.         super.paintComponent(g);  
  112.           
  113.         g.drawImage(ii.getImage(), x, y, width, height, null);  
  114.     }  
  115. }  


 

运行效果 :

这篇关于Java实现图片的放缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1037802

相关文章

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu