在swing编程中,我想在图片上画个矩形,难后画布里面只显示这个矩形区域的图片,谢谢各位帮我看看!!!!!

解决方案 »

  1.   

    import java.awt.Dimension;
    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);
    }

    }

    }
      

  2.   

    没有楼上这么复杂
    只要用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 - 当缩放并转换了更多图像时要通知的对象。