【java/graphics】在graphics中绘制缩放后的图像示例
【问题】
graphics画原图容易做到,怎么绘制缩小到1/4或是放大到四倍的图像?
【关键】
使用BufferedImage..getScaledInstance进行图像缩放。
【有图有真相】
【代码】
package test230505; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; /** * 图像缩放在JFrame中显示示例 * */ public class ScaledImgFrame extends JFrame{ private static final long serialVersionUID = 7431267380511524244L; public final static int W=800; public final static int H=600; public void paint(Graphics g) { final Font Song16=new Font("宋体", Font.PLAIN, 16); final Color Golden_Color=new Color(204, 119, 39); // 画黑色背景 g.setColor(Color.black); g.fillRect(0, 0, W, H); ImageIcon icon = new ImageIcon("knight.png"); int iconWidth = icon.getIconWidth(); int iconHeight = icon.getIconHeight(); g.setColor(Golden_Color); g.setFont(Song16); // 绘制原图 Image original=icon.getImage(); g.drawImage(original, 50, 50, iconWidth, iconHeight, null); g.drawString("原图", 50, 50); try { BufferedImage src = ImageIO.read(new File("knight.png")); // 绘制缩小到1/4的图像 Image smaller = src.getScaledInstance(iconWidth/2, iconHeight/2, Image.SCALE_DEFAULT); g.drawImage(smaller, 150, 350, iconWidth/2, iconHeight/2, null); g.drawString("缩小图", 150, 350); // 绘制放大到4倍的图像 Image bigger = src.getScaledInstance(iconWidth*2, iconHeight*2, Image.SCALE_DEFAULT); g.drawImage(bigger, 350, 350, iconWidth*2, iconHeight*2, null); g.drawString("放大图", 350, 350); }catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ScaledImgFrame fm=new ScaledImgFrame(); fm.setTitle("ScaledImgFrame");// 设置标题 fm.setLocation(10,20);// 设置左上角位置 fm.setSize(ScaledImgFrame.W, ScaledImgFrame.H);// 设置宽高 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置缺省关闭操作 fm.setVisible(true);// 设置窗格可见 } }
END
分类:
Java.Swing
, Java.Graphics2D
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2022-05-06 【SpringBoot】怎样在SpringBoot程序启动后立即执行一些代码
2022-05-06 【Java/线程】用线程池避免线程争抢有限的数据库连接资源
2022-05-06 【Canvas技法】椭圆画法
2020-05-06 如何让Web程序在点击按钮后出现如执行批处理程序般的效果
2020-05-06 Agumater 增加基本数据上传下载能力
2020-05-06 Agumater 爬虫进度带上了百分比,消除了.0
2020-05-06 Java程序取MySQL的datetime字段,如何消除时间尾后讨厌的".0"