【java/graphics】在JFrame中仅绘制缩放图像示例

【目的】

在graphics上下文中绘制图片,需要放大或缩小绘制。

【关键语句】

g.drawImage(img, left, top, width, height, null);

以上参数中width和height是画到画布上的宽度和高度,它们的尺寸比原图大就是放大,比原图小就是缩小。

【代码】

复制代码
package test230505;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

/**
 * 在JFrame中仅绘制缩放图像示例
 *
 */
public class DrawScaledImgFrame extends JFrame{
    private static final long serialVersionUID = 7431267380511524244L;
    public final static int W=1200;
    public final static int H=700;

    public void paint(Graphics g) {
        final Font Song16=new Font("宋体", Font.BOLD, 18);
        final Color Golden_Color=new Color(0, 0, 0);
        
        // 画黑色背景
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, W, H);
        
        ImageIcon icon = new ImageIcon("ljfl.jpg");
        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);
        
        // 绘制缩小到1/4的图像
        g.drawImage(original, 450, 50, iconWidth/2, iconHeight/2, null);// 比原图尺寸小即缩小        
        g.drawString("缩小图", 450, 50);
        
        // 绘制放大到4倍的图像
        g.drawImage(original, 850, 50, iconWidth*2, iconHeight*2, null);// 比原图尺寸大即放大        
        g.drawString("放大图", 850, 50);
    }
    
    public static void main(String[] args) {
        DrawScaledImgFrame fm=new DrawScaledImgFrame();
        
        fm.setTitle("DrawScaledImgFrame");// 设置标题
        fm.setLocation(10,20);// 设置左上角位置
        fm.setSize(DrawScaledImgFrame.W, DrawScaledImgFrame.H);// 设置宽高
        fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置缺省关闭操作
        
        fm.setVisible(true);// 设置窗格可见
    }
}
复制代码

【运行结果】

END

posted @   逆火狂飙  阅读(86)  评论(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"
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示