用Java放大和缩小图像

我认为这个问题非常自我解释,我想使用JSlider实现一个简单的缩放function,例如在Windows Live Photo Gallery中。

我已经在网上快速浏览了一下,但我尝试使用的所有代码在将其复制到eclipse时似乎都有错误。 我真的不想使用第三方库,因为该应用程序可能以公司名称出售。 另外,我开始意识到为了防止错误可能需要一些安全预防措施,但我不知道它们会是什么。

因此,如果有人可以提供一些Java代码来放大和缩小图像,那么我们将非常感激。

提前致谢

PS我计划将Image用作JLabelImageIcon ,它将被添加到JScrollPane

您可以通过在原始图像上使用缩放变换轻松实现此目的。 假设您当前的图像宽度为newImageWidth ,当前图像高度为newImageHeight ,以及当前缩放级别zoomLevel ,您可以执行以下操作:

 int newImageWidth = imageWidth * zoomLevel; int newImageHeight = imageHeight * zoomLevel; BufferedImage resizedImage = new BufferedImage(newImageWidth , newImageHeight, imageType); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, newImageWidth , newImageHeight , null); g.dispose(); 

现在,用resizedImage替换显示区域中的原始图像resizedImage

您也可以按如下方式使用它:

 public class ImageLabel extends JLabel{ Image image; int width, height; public void paint(Graphics g) { int x, y; //this is to center the image x = (this.getWidth() - width) < 0 ? 0 : (this.getWidth() - width); y = (this.getHeight() - width) < 0 ? 0 : (this.getHeight() - width); g.drawImage(image, x, y, width, height, null); } public void setDimensions(int width, int height) { this.height = height; this.width = width; image = image.getScaledInstance(width, height, Image.SCALE_FAST); Container parent = this.getParent(); if (parent != null) { parent.repaint(); } this.repaint(); } } 

然后你可以把它放到你的框架上,并使用缩放因子缩放的方法,我使用了百分比值。

 public void zoomImage(int zoomLevel ){ int newWidth, newHeight, oldWidth, oldHeight; ImagePreview ip = (ImagePreview) jLabel1; oldWidth = ip.getImage().getWidth(null); oldHeight = ip.getImage().getHeight(null); newWidth = oldWidth * zoomLevel/100; newHeight = oldHeight * zoomLevel/100; ip.setDimensions(newHeight, newWidth); }