开发者

Java Swing: Resizing JPanel with Image

开发者 https://www.devze.com 2023-02-04 11:28 出处:网络
I\'m attempting to resize an Image I\'ve drawn onto an ImagePanel (extending a JPanel) and it doesn\'t seem to be working. I\'ve gotten some sample code from off the internet that overrides the compon

I'm attempting to resize an Image I've drawn onto an ImagePanel (extending a JPanel) and it doesn't seem to be working. I've gotten some sample code from off the internet that overrides the components paint() method, I'm thinking this might be the problem, here's my code.

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (img != null) { // Scale it by width int scaledWidth = (int)((img.getWidth() * getHeight()/img.getHeight()));
        // If the image is not off the screen horizontally...
        if (scaledWidth < getWidth()) {
            // Center the left and right destination x coordinates.

            int leftOffset = getWidth() / 2 - scaledWidth / 2;
            int rightOffset = getWidth() / 2 + scaledWidth / 2;
            g.drawImage(img, leftOffset, 0, rightOffset, getHeight(), 0, 0, img.getWidth(), img.getHeight(), null);
        }
        // Otherwise, the image width is too much, even scaled
        // So we need to center it the other direction
        else {
            int scaledHeight = (img.getHeight() * getWidth()) / img.getWidth();

            int topOffset = getHeight() / 2 - scaledHeight / 2;
            int bottomOffset = getHeight() / 2 + scaledHeight / 2;

            g.drawImage(img, 0, topOffset, getWidth(), bottomOffset, 0, 0, img.getWidth(), img.getHeight(), null);
        }
    }
}

and I'm calling it from...

public void resetImage(double width, double height) {
     BufferedImage scaledImage = new BufferedImage((int)width, (int)height,BufferedImage.TYPE_INT_ARGB);
     // Paint scaled version of image to new image
     Graphics2D graphics2D = 开发者_JS百科scaledImage.createGraphics(); 
     graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 

     this.setSize((int)img.getWidth(), (int)img.getHeight());
     graphics2D.drawImage(this.img, 0, 0, (int)width, (int)height, null); graphics2D.dispose(); 
}

(where width and height in this blurp are the new width and height to be applied.

Thanks.


Are you sure that method paintComponent is called? try to call ImagePanel.repaint() in the end of resetImage

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号