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
精彩评论