public static BufferedImage zoom(BufferedImage image,float factorX,float factorY) {
      AffineTransform transform=AffineTransform.getScaleInstance(factorX,factorY);
      BufferedImageOp op=new AffineTransformOp(transform,AffineTransformOp.TYPE_BILINEAR);
      BufferedImage filteredImage=new BufferedImage(
            (int)(image.getWidth()*factorX),
            (int)(image.getHeight()*factorY),
            image.getType());
      op.filter(image, filteredImage);
      return filteredImage;
   }

解决方案 »

  1.   

    可以试试下面的测试程序.
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.image.*;import javax.swing.*;
    import javax.swing.event.*;public class image extends JApplet
    {   public String imageName = "abc.gif";
       boolean isStandalone = false;
       JSlider slid;
       static ImageProcessingPanel panel;
       BufferedImage image,changedImage;   public static void main(String[] args) {
          image applet = new image();
          applet.imageName = "c:/abc.jpg";
          applet.isStandalone = true;
          JFrame frame = new JFrame();
          //EXIT_ON_CLOSE == 3
          frame.setDefaultCloseOperation(3);
          frame.setTitle("Applet Frame");
          frame.getContentPane().add(applet, BorderLayout.CENTER);
          applet.init();
          applet.start();
          frame.setSize(400,320);
          Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
          frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
          frame.setVisible(true);
       }
       Object P = "";
       boolean isIn = false;   public void processZoom(ChangeEvent e) {
          if(isIn)
             return;
          synchronized(P) {
             isIn = true;
          JSlider sld = (JSlider)e.getSource();
          float factor = (float)sld.getValue();
          if(factor < 0) {
             factor = -1/factor;
          }else if(factor == 0)
             factor = 1;
          System.out.println(""+factor);
          float fX = factor;
          float fY = factor;
          if(isHorizonFixed)fX=1.0f;
          if(isVertFixed)fY=1.0f;
          changedImage = zoom(image,fX,fY);
          panel.redraw(changedImage);
          isIn = false;
          }
       }
       boolean isHorizonFixed=false;
       boolean isVertFixed = false;   public static BufferedImage zoom(BufferedImage image,float factorX,float factorY) {
          AffineTransform transform=AffineTransform.getScaleInstance(factorX,factorY);
          BufferedImageOp op=new AffineTransformOp(transform,AffineTransformOp.TYPE_BILINEAR);
          BufferedImage filteredImage=new BufferedImage(
                (int)(image.getWidth()*factorX),
                (int)(image.getHeight()*factorY),
                image.getType());
          op.filter(image, filteredImage);
          return filteredImage;
       }
       private void pp(ChangeEvent e) {
          isHorizonFixed = boxH.isSelected();
          isVertFixed = boxV.isSelected();
          System.out.println("Ho:"+isHorizonFixed+" Ve:"+isVertFixed);
       }
     JCheckBox boxH = new JCheckBox("Hori");
     JCheckBox boxV = new JCheckBox("Vert");
       public void init()
       {
          Container contentPane=getContentPane();
          panel=new ImageProcessingPanel();
          contentPane.add(panel,"Center");
          JSlider slid = new JSlider(JSlider.HORIZONTAL,-10,3,0);
          slid.addChangeListener(new ChangeListener() {
             public void stateChanged(ChangeEvent e) {
                processZoom(e);
             }
          });
          JPanel pnlControl = new JPanel();
          contentPane.add(pnlControl,"South");
          pnlControl.add(slid);
          boxH.addChangeListener(new ChangeListener() {
             public void stateChanged(ChangeEvent e) {
                pp(e);
             }});
          boxV.addChangeListener(new ChangeListener() {
             public void stateChanged(ChangeEvent e) {
                pp(e);
             }});
          pnlControl.add(boxH);
          pnlControl.add(boxV);
    //      contentPane.add(boxV,"South");
          try{
             Image loadedImage;
             if(isStandalone)
          loadedImage= new ImageIcon(imageName).getImage();
       else
        loadedImage=getImage(getCodeBase(),imageName);
     image=load(panel,loadedImage);
     panel.redraw(image);
     //init()
     }catch(Exception e){e.printStackTrace();}
       }
       static MediaTracker tracker;
       public static BufferedImage load(Component panel, Image loadedImage){
          tracker=new MediaTracker(panel);
          tracker.addImage(loadedImage,0);
          try{ tracker.waitForID(0);}
          catch(InterruptedException e){}      BufferedImage image=new BufferedImage(
                     loadedImage.getWidth(null),
                     loadedImage.getHeight(null),
                     BufferedImage.TYPE_INT_RGB);
          Graphics2D g2=image.createGraphics();
          g2.drawImage(loadedImage,0,0,null);
          g2.drawImage(loadedImage,100,100,null);
          return image;
       }}class ImageProcessingPanel extends JPanel
    {
       private BufferedImage image;   public void paintComponent(Graphics g)
       {
          super.paintComponent(g);
          if (image!=null)
         g.drawImage(image,5,5,null);
       }   public void redraw(BufferedImage image)
       {
          this.image=image;
          repaint();
       }}