import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;
import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel;
public class ImageSuoFang extends JFrame { /** * */ private static final long serialVersionUID = 1L; DrawResImg dri; BorderLayout bl; public ImageSuoFang() { dri = new DrawResImg("D://1.png"); bl = new BorderLayout(); setMinimumSize(new Dimension(1000, 800)); setLayout(bl); add(dri, bl.CENTER); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setVisible(true); } class DrawResImg extends JPanel implements MouseWheelListener{ /** * */ private static final long serialVersionUID = 1L; BufferedImage resBI; BufferedImage resBI2; int count = 0; public DrawResImg(String path) { try { resBI = ImageIO.read(new File(path)); } catch (IOException e) { e.printStackTrace(); } resBI2 = resBI; addMouseWheelListener(this); } public void paint(Graphics g) { g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(), getHeight()); g.drawImage(resBI2, 200, 100, this); }
public void mouseWheelMoved(MouseWheelEvent e) { if (e.getWheelRotation() < 0) { count--; } if (e.getWheelRotation() > 0) { count++; } resBI2 = resizePic(resBI, resBI.getWidth() + (10 * count), resBI.getHeight() + (10 * count)); repaint(); } } private static BufferedImage resizePic(BufferedImage source, int targetW, int targetH) { // targetW,targetH分别表示目标长和宽 int type = source.getType(); BufferedImage target = null; double sx = (double) targetW / source.getWidth(); double sy = (double) targetH / source.getHeight(); // 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放 // 则将下面的if else语句注释即可 if (sx < sy) { sx = sy; targetW = (int) (sx * source.getWidth()); } else { sy = sx; targetH = (int) (sy * source.getHeight()); } target = new BufferedImage(targetW, targetH, type); Graphics2D g = target.createGraphics(); // smoother than exlax: /*g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); */ g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy)); //g.dispose(); return target; }
public static void main(String[] arg){ new ImageSuoFang(); }
}