【问题标题】:How to draw transparent image in java with BufferedImage?java - 如何使用BufferedImage在java中绘制透明图像?
【发布时间】:2018-11-01 15:05:14
【问题描述】:

我愿意借助 graphics2D 和 BufferedImage 在 Java 画布上显示透明图像。

这是加载图像的代码。

private static BufferedImage sprites,board;
    public static void load(){
        try {
            board = new BufferedImage(100,100,BufferedImage.TYPE_INT_ARGB);
            board = ImageIO.read(new File("res/chesssprite.png"));
        } catch (IOException ex) {
            Logger.getLogger(SpriteManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

这是渲染图像的代码

public void render(){

        BufferStrategy bs = this.getBufferStrategy();

        if(bs == null){
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();
        Graphics2D g2d = (Graphics2D) g;

        {

            g2d.setColor(new Color(150,150,150));
            g2d.fillRect(0,0,getWidth(), getHeight());

            g2d.setComposite(AlphaComposite.Src);
            g2d.drawImage(board,0,0,null);

        }
        g = g2d;
        g.dispose();
        bs.show();
    }

我在网上搜索了很多,但没有找到解决方案。如果有人知道如何解决这个问题。

这是图片..

这是输出的样子

【问题讨论】:

  • 那不是透明图片。它似乎基于透明图像,但您使用的图像具有不透明的灰色棋盘图案作为其背景(通常由图像编辑器和查看器用于直观地指示透明区域)。
  • @VGR 我认为它是透明的,但不确定。如果你能告诉我如何让它透明
  • 在computergraphics.stackexchange.com 上获得答案可能会更好。就个人而言,我会使用 GIMP 的模糊选择工具来选择和清除棋盘区域。
  • @VGR 好的!现在我让它透明了,但输出很有趣!!现在只要有透明度,它就会显示黑色。虽然离解决方案更近了一步。

标签: java canvas bufferedimage graphics2d


【解决方案1】:

好的,遇到这种问题的人:

  1. 确保图像是透明的。在图像查看器中测试它。

  2. 删除g2d.setComposite(AlphaComposite.Src);这一行添加了alpha合成,使每个透明像素变黑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2011-08-06
    • 2014-05-08
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多