【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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值