用Java放大和缩小图像
image
image-processing
java
5
0

我认为这个问题是不言而喻的。我想使用像Windows Live Photo Gallery中的JSlider来实现简单的缩放功能。

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

因此,如果有人可以为我提供一些Java代码来放大和缩小图像,将不胜感激。

PS我计划将Image用作JLabel内的ImageIcon ,并将其添加到JScrollPane

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

通过对原始图像使用比例转换,可以轻松实现此目的。假设当前图像宽度为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();

现在,取代原来的图像, originalImage在您的显示面积, 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);
}
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号