gpt4 book ai didi

java - 创建一个 ImageIcon,它是另一个 ImageIcon 的镜像

转载 作者:行者123 更新时间:2023-11-29 08:19:11 27 4
gpt4 key购买 nike

我想知道是否有办法创建一个 ImageIcon,它是另一个 ImageIcon 的镜像。

在 Google 上搜索,我找到了如何使用许多 AWT 库来实现这一点。

有没有办法用 Swing 做到这一点?如果没有,我仍然无法使用 AWT 方法:

我要镜像的 ImageIcon 是一个动画 gif(包含透明颜色),AWT 方法返回一个非透明(透明颜色更改为不透明黑色)和非动画 gif。

关于如何保持动画和透明色有什么想法吗?

这是我找到的 AWT 代码(rangerStand 是原始的 ImageIcon):

 Image reversed = rangerStand.getImage();
BufferedImage bufferedImage = new BufferedImage(reversed.getWidth(null), reversed.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics gb = bufferedImage.getGraphics();
gb.drawImage(reversed, 0, 0, null);
gb.dispose();

AffineTransform tx = AffineTransform.getScaleInstance(-1, 1);
tx.translate(-reversed.getWidth(null), 0);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
bufferedImage = op.filter(bufferedImage, null);
ImageIcon lol = new ImageIcon(bufferedImage);
this.sprite.setIcon(lol);

感谢阅读。

最佳答案

您可能想尝试子类化 ImageIcon 类并反转图像。试试这段代码,它可能会起作用(我还没有尝试使用动画透明 gif,但它应该可以工作):

编辑:我稍微更改了代码并使用动画 gif 对其进行了测试。有效!

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


/**
* @author Savvas Dalkitsis
*/
public class Test {

public static void main(String[] args) {
JFrame f = new JFrame("Test");
JLabel l = new JLabel();
ImageIcon io = new MirrorImageIcon("test.gif");
l.setIcon(io);
f.getContentPane().add(l);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}

}

@SuppressWarnings("serial")
class MirrorImageIcon extends ImageIcon {

public MirrorImageIcon(String filename) {
super(filename);
}

@Override
public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D)g.create();
g2.translate(getIconWidth(), 0);
g2.scale(-1, 1);
super.paintIcon(c, g2, x, y);
}

}

关于java - 创建一个 ImageIcon,它是另一个 ImageIcon 的镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1708011/

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