package fr.utc.leapband.utilities; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import javax.swing.JLabel; @SuppressWarnings("serial") public class ScaleLabel extends JLabel{ Image image; BufferedImage bufImage; BufferedImage originalBufImage; Graphics2D bufImageG; public double scaleX = 1.0; public double scaleY = 1.0; public void loadImage(String fileName) { image = this.getToolkit().getImage(fileName); MediaTracker mt = new MediaTracker(this); mt.addImage(image, 0); try { mt.waitForAll(); } catch (Exception ex) { ex.printStackTrace(); } originalBufImage = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); bufImage = originalBufImage; bufImageG = bufImage.createGraphics(); bufImageG.drawImage(image, 0, 0, this); repaint(); } // 过滤图像 public void applyFilter() { if (bufImage == null) return; BufferedImage filteredBufImage = new BufferedImage((int) (image.getWidth(this) * scaleX), (int) (image.getHeight(this) * scaleY), BufferedImage.TYPE_INT_ARGB); AffineTransform transform = new AffineTransform(); transform.setToScale(scaleX, scaleY); AffineTransformOp imageOp = new AffineTransformOp(transform, null); imageOp.filter(originalBufImage, filteredBufImage); bufImage = filteredBufImage; repaint(); } // 重载容器的paintComponent()方法 public void paint(Graphics g) { super.paintComponent(g); if (bufImage != null) { Graphics2D g2 = (Graphics2D) g; g2.drawImage(bufImage, (this.getWidth() - bufImage.getWidth()) / 2, (this.getHeight() - bufImage.getHeight()) / 2, this); } } }