【问题标题】:How do I make Transparent BufferedImage如何制作透明缓冲图像
【发布时间】:2021-01-07 16:31:22
【问题描述】:

我正在制作一个展示不同版本的选举团的程序。每个状态都有一种独特的颜色,这样我就可以将它们分开并用它们制作一个新的 BufferedImage。我需要 BufferedImage 是透明的,这样我就可以在不与各州重叠黑色矩形的情况下重建美国。我尝试让每个像素透明,但它仍然显示为黑色。

这只是使黑色像素透明的部分。 (dr 是 Graphics2D,state 是 BufferedImage)

for (int u = 0; u < state.getHeight(); u++) {

        for (int o = 0; o < state.getWidth(); o++) {
            
            Color rgbValue = new Color(state.getRGB(o, u));
            int red = rgbValue.getRed();
            int green = rgbValue.getGreen();
            int blue = rgbValue.getBlue();

            if (red == 0 && green == 0 && blue == 0) {
                dr.setColor(new Color(0, 0, 0, 0));
                dr.fillRect(o, u, 1, 1);
            }
        }
    }

【问题讨论】:

  • 发布您的minimal reproducible example 以证明问题。创建 BufferedImage 的代码在哪里?你用透明度创建它吗?
  • @camickr BufferedImage 已经创建,这只是去除黑色像素的部分
  • 那是我的问题。您是否正确创建了 BufferedImage?并非所有缓冲图像都支持透明度。
  • @camickr 我这样声明了我的 BufferedImage: BufferedImage state = new BufferedImage(topRight - topLeft, getTop(-2)[0], BufferedImage.TYPE_INT_ARGB);
  • 仍然没有看到 MRE,所以我帮不上忙。

标签: java graphics


【解决方案1】:

如果在 BufferedImage 中没有绘制任何内容,则像素变为“空”,而 BufferedImage 将变为无信息,因此为黑色。你必须在这些像素上绘制一些东西,然后在一个新的循环中使它们变得透明。

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2021-03-22
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多