我认为这个问题非常明显。我想在Windows Live Photo Gallery中使用JSlider
来实现简单的缩放功能。
我已经快速浏览了一下,但是当我将它复制到Eclipse中时,我尝试使用的所有代码似乎都有错误。我真的不想使用第三方库,因为该应用程序可能以公司名称出售。另外,我开始意识到可能需要一些安全预防措施来防止错误,但我不知道这些会是什么。
所以,如果有人可以提供一些Java代码来放大和缩小图像,那将非常感激。
P.S。我计划将图片作为ImageIcon
内的JLabel
用于JScrollPane
。
答案 0 :(得分:9)
您可以通过在原始图像上使用缩放变换轻松实现此目的。
假设您当前的图片宽度为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
。
答案 1 :(得分:2)
您也可以按如下方式使用它 :
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);
}