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

标签 java swing animation awt flip

我想知道是否有办法创建一个 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/

相关文章:

java - JTable 中的 JFileChooser

java - java swing JList 中的快捷方式

css - 悬停后如何重复CSS圆形动画

css - 更改与背景重叠的部分文本的颜色

java - 由于数据库连接,Tomcat webapp 在启动时挂起

java - MergeSort 算法 - java

java - 无法使用 Java 的 JBMC(有界模型检查器)命令

java - 端点没有适配器;您的端点是否使用 @Endpoint 注释,或者它是否实现了受支持的接口(interface),如 MessageHandler 或 PayloadEndpoint?

java - 如何在按钮下方设置日期选择器

javascript - 使用 setInterval() 的 jQuery 动画