java swing中的某个drawImage方法

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)

功能说明

这个方法的作用是把图片的特定区域绘制到屏幕上,并且在绘制的过程中可以对图片进行缩放处理,让它和你设定的目标区域相契合。而且,图片中透明的部分不会覆盖原来已经存在的像素。

参数解释

  • img:这是你要绘制的图片。要是这个参数为空,那么这个方法就不会进行任何操作。
  • 目标矩形(dx1, dy1, dx2, dy2):这是用来确定图片最终显示位置和大小的区域。
    • (dx1, dy1)是目标区域左上角的坐标。
    • (dx2, dy2)是目标区域右下角的坐标。
  • 源矩形(sx1, sy1, sx2, sy2):此区域用于确定你想从原图中截取哪一部分。
    • (sx1, sy1)是原图中你要截取区域左上角的坐标。
    • (sx2, sy2)是原图中你要截取区域右下角的坐标。
  • observer:当图片加载进度有更新时,系统会通知这个对象。

缩放规则

系统会自动把源矩形区域映射到目标矩形区域。在这个过程中,可能会对图片进行缩放或者翻转操作,具体情况如下:

  • 如果目标区域比源区域大,图片会被放大。
  • 如果目标区域比源区域小,图片则会被缩小。
  • 要是源矩形的坐标顺序和目标矩形的坐标顺序不一致,图片就会被翻转。

返回值情况

  • 返回 false 表示图片还在加载或者处理中。
  • 返回 true 表示图片已经完全加载完成并且可以正常显示。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.swing.*;
public class drawImageDemoA extends JFrame {

	drawImageDemoA_Panel panel;
	drawImageDemoA(){
		super("练习图片翻转");
		setBounds(600, 200, 600, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		panel = new drawImageDemoA_Panel();
		add(panel);
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		SwingUtilities.invokeLater(() ->{
			new drawImageDemoA().setVisible(true);
		});
	}
	
	class drawImageDemoA_Panel extends JPanel{
		Image image = new ImageIcon("color.png").getImage();
		
		drawImageDemoA_Panel(){}
		
		@Override
		protected void paintComponent(Graphics g) {
			// TODO Auto-generated method stub
			super.paintComponent(g);
			Graphics2D g2 = (Graphics2D)g;
			g2.drawImage(image, 0, 0, image.getWidth(this)/3, image.getHeight(this)/3, 0, 0, image.getWidth(this)/3, image.getHeight(this)/3, this);
			g2.drawImage(image, image.getWidth(this)/3, 0, image.getWidth(this)/3+image.getWidth(this)/3, image.getHeight(this)/3, 
					image.getWidth(this)/3, 0, image.getWidth(this)/3+image.getWidth(this)/3, image.getHeight(this)/3, this);
			g2.drawImage(image, image.getWidth(this)/3+image.getWidth(this)/3, 0, image.getWidth(this)/3+image.getWidth(this)/3+image.getWidth(this)/3, image.getHeight(this)/3, 
					 image.getWidth(this)/3+image.getWidth(this)/3, 0, image.getWidth(this)/3+image.getWidth(this)/3+image.getWidth(this)/3, image.getHeight(this)/3, this);
		}
		
	}

}

这个方法很适合在需要实时缩放图片或者显示大图片局部的场景中或者翻转图片,比如游戏角色运动时碰见障碍物改变运动方向等等场景中使用,不过要留意异步加载可能会带来的延迟问题。 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值