【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

posted @   逆火狂飙  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需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"
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示