sun上有很多例子。
http://java.sun.com/products/java-media/jai/足够实现你的要求了。有例子,比较棒的那一种。

解决方案 »

  1.   

    应该是用java2d来实现的,
    具体怎么实现没有做过。
      

  2.   

    public class test12 extends JLabel {
      ImageIcon image = new ImageIcon("f:/mytest/img/test1.jpg");
      Point pressed, last;
      boolean firstRect;  public test12() {
        try {
          setBackground(Color.green) ;
          setIcon(image) ;
        } catch (Exception e) {    }    addMouseListener(new MouseAdapter() {
          public void mousePressed(MouseEvent e) {
            firstRect = true;
            pressed = e.getPoint() ;
          }      public void mouseReleased(MouseEvent e) {
            if (pressed != null) {
              Point released = e.getPoint() ;
              Rectangle clip = new Rectangle();
              Graphics g = getGraphics();
              Dimension size = getSize();          try {
                clip.x = pressed.x;
                clip.y = pressed.y;
                clip.width = Math.abs(released.x = released.y) ;
                clip.height = Math.abs(released.y - pressed.y);
                g.clearRect(0,0,size.width, size.height);
                g.setClip(clip);
                g.drawImage(image.getImage(),0,0,test12.this);
              } finally {
                g.dispose() ;
              }
            }
          }      public void mouseClicked(MouseEvent e) {
            repaint();
          }
        });
        addMouseMotionListener(new MouseMotionAdapter() {
          public void mouseDragged(MouseEvent e) {
            Point loc = e.getPoint() ;
            Graphics g = getGraphics();        try {
              g.setXORMode(getBackground());
              if (firstRect) {
                firstRect = false;
              } else {
                //System.out.println(last.x +" "+last.y) ;
                g.drawRect(pressed.x , pressed.y , Math.abs(pressed.x - loc.x), Math.abs(pressed.y - loc.y));          }
                g.drawRect(pressed.x, pressed.y , Math.abs(loc.x-pressed.x), Math.abs(loc.y - pressed.y));        } finally {
              g.dispose();
            }
          }
        });
      }  public void paint(Graphics g) {
        g.drawImage(image.getImage(),0,0,this);
      }
    }
    public class Frame1 extends JFrame {
      private test12 jPanel1 = new test12();  public Frame1() {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      public static void main(String[] args) {
        Frame1 frame1 = new Frame1();
        frame1.setSize(750,600) ;
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setVisible(true) ;
      }
      private void jbInit() throws Exception {
        this.getContentPane().setLayout(null);
        jPanel1.setSize(95,50);
        //jPanel1.update();
        //jPanel1.setBounds(new Rectangle(8, 10, 332, 265));
        this.getContentPane().add(jPanel1, null);
        //this.getContentPane().add(jPanel2, null);
      }