gpt4 book ai didi

java - 从另一个获得一个新的旋转图像图标?

转载 作者:行者123 更新时间:2023-12-02 07:46:05 25 4
gpt4 key购买 nike

我的问题很简单:

我有一个 ImageIcon,我想获得另一个精确旋转旋转 * 90° 次的 ImageIcon。方法是这样的:

private ImageIcon setRotation(ImageIcon icon, int rotation);

我宁愿不必使用外部类。谢谢

最佳答案

从 ImageIcon 获取 BufferedImage

所有图像转换通常都是针对 BufferedImage 完成的。您可以从 ImageIcon 获取图片然后将其转换为BufferedImage:

Image image = icon.getImage();
BufferedImage bi = new BufferedImage(
image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics bg = bi.getGraphics();
bg.drawImage(im, 0, 0, null);
bg.dispose();

旋转

然后您可以使用以下代码将其旋转 -90 到 90 度:

public BufferedImage rotate(BufferedImage bi, float angle) {
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(angle), bi.getWidth() / 2.0, bi.getHeight() / 2.0);
at.preConcatenate(findTranslation(at, bi, angle));

BufferedImageOp op =
new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
return op.filter(bi, null);
}

private AffineTransform findTranslation(
AffineTransform at, BufferedImage bi, float angle) {
Point2D p2din = null, p2dout = null;

if (angle > 0 && angle <= 90) {
p2din = new Point2D.Double(0, 0);
} else if (angle < 0 && angle >= -90) {
p2din = new Point2D.Double(bi.getWidth(), 0);
}
p2dout = at.transform(p2din, null);
double ytrans = p2dout.getY();

if (angle > 0 && angle <= 90) {
p2din = new Point2D.Double(0, bi.getHeight());
} else if (angle < 0 && angle >= -90) {
p2din = new Point2D.Double(0, 0);
}
p2dout = at.transform(p2din, null);
double xtrans = p2dout.getX();

AffineTransform tat = new AffineTransform();
tat.translate(-xtrans, -ytrans);
return tat;
}

这对于从 -90 度到 90 度的旋转图像效果很好,但它不支持更多。您可以通过AffineTransform运行有关使用坐标的更多说明的文档。

将 BufferedImage 设置为 ImageIcon

最后用转换后的图像填充 ImageIcon:icon.setImage((Image) bi);

关于java - 从另一个获得一个新的旋转图像图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10831150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com