没有楼上这么复杂 只要用Graphics对象就可以完成了 public abstract boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer)绘制当前可用的指定图像的指定区域,动态地缩放图像使其符合目标绘制表面的指定区域。 以指定的背景色绘制透明像素。此操作等同于用给定颜色填充指定图像宽度和高度的矩形,然后在其上绘制图像,但是可能更为高效。 此方法在任何情况下都立刻返回,甚至在要绘制的图像区域没有为当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示尚未完成,则 drawImage 返回 false。随着更多的图像可用,装入图像的进程通知指定的图像观察者。 此方法总是用图像的非缩放版本来呈现缩放的矩形,并且动态地执行所需的缩放。此操作不使用图像的缓存的、缩放版本。执行图像从源到目标的缩放,这样源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。 参数: img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何动作。 dx1 - 目标矩形第一个角的 x 坐标。 dy1 - 目标矩形第一个角的 y 坐标。 dx2 - 目标矩形第二个角的 x 坐标。 dy2 - 目标矩形第二个角的 y 坐标。 sx1 - 源矩形第一个角的 x 坐标。 sy1 - 源矩形第一个角的 y 坐标。 sx2 - 源矩形第二个角的 x 坐标。 sy2 - 源矩形第二个角的 y 坐标。 bgcolor - 在图像非透明部分下绘制的背景色。 observer - 当缩放并转换了更多图像时要通知的对象。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;public class Test extends JFrame { private static final long serialVersionUID = 6470477702039762986L;
private MyPane pane = null; public Test(){
super("Test");
pane = new MyPane(new ImageIcon("D:/29.jpg"));
this.getContentPane().add(pane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(new Dimension(300, 200));
this.setVisible(true);
} public static void main(String[] args) {
new Test();
}
class MyPane extends JPanel{ private static final long serialVersionUID = 5513846179176038092L;
private ImageIcon image = null;
public MyPane(ImageIcon image){
this.image = image;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.clip(new Rectangle2D.Float(20, 20, 150, 100));
g2d.drawImage(image.getImage(), 0, 0, this.getWidth(), this.getHeight(), this);
}
}
}
只要用Graphics对象就可以完成了
public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
Color bgcolor,
ImageObserver observer)绘制当前可用的指定图像的指定区域,动态地缩放图像使其符合目标绘制表面的指定区域。
以指定的背景色绘制透明像素。此操作等同于用给定颜色填充指定图像宽度和高度的矩形,然后在其上绘制图像,但是可能更为高效。 此方法在任何情况下都立刻返回,甚至在要绘制的图像区域没有为当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示尚未完成,则 drawImage 返回 false。随着更多的图像可用,装入图像的进程通知指定的图像观察者。 此方法总是用图像的非缩放版本来呈现缩放的矩形,并且动态地执行所需的缩放。此操作不使用图像的缓存的、缩放版本。执行图像从源到目标的缩放,这样源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
参数:
img - 要绘制的指定图像。如果 img 为 null,则此方法不执行任何动作。
dx1 - 目标矩形第一个角的 x 坐标。
dy1 - 目标矩形第一个角的 y 坐标。
dx2 - 目标矩形第二个角的 x 坐标。
dy2 - 目标矩形第二个角的 y 坐标。
sx1 - 源矩形第一个角的 x 坐标。
sy1 - 源矩形第一个角的 y 坐标。
sx2 - 源矩形第二个角的 x 坐标。
sy2 - 源矩形第二个角的 y 坐标。
bgcolor - 在图像非透明部分下绘制的背景色。
observer - 当缩放并转换了更多图像时要通知的对象。