は、以下のようにしても、それを使用することができます。
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);
}
ありがとうGETah、私はすでにコード内でこれを行う方法を持っていましたが、このperposeにも役立つかもしれないと私はクリックしませんでしたが、私がちょうどテストしたように - 明らかにできます! – Andy
ああ、このメソッドは画像の透明度に影響を与えているようです(透明なビットは黒です)。なぜ問題を解決するかについて何らかのアイデアがありますか? – Andy
@Andyそれは、AffineTransformを使用して画像の透明度を維持する必要があります...これをチェックしてくださいhttp://stackoverflow.com/a/2176977/782719 – GETah