【问题标题】:How to set a pixel in a BufferedImage To Transparent如何将 BufferedImage 中的像素设置为透明
【发布时间】:2014-08-14 15:23:57
【问题描述】:

我目前正在制作游戏,我需要将 BufferedImage(使用 ImageIO.read 加载)的几个像素设置为以最快、最好的方式透明。

我真的找不到与这个问题有关的任何其他主题,如果我回答了它并没有真正帮助/适合我需要的东西。

谢谢:)

【问题讨论】:

标签: java bufferedimage


【解决方案1】:

使用值 0-255 的 Color(red, green, blue, alpha)。其中 alpha 是不透明度。

具有 Alpha 通道(RGBA、BGRA)的类型的缓冲图像

Color halfTransparant = new Color(0x76, 0x54, 0x32, 128);

在数组上使用 setRGB 这仍然不是很快,您可能会访问栅格数据。 但是为什么要在时间紧迫的情况下使用动态生成的图像。

【讨论】:

    【解决方案2】:

    明智的方法是从一开始就创建具有正确 Alpha 的图像(使用具有透明度的图像格式,例如 PNG 和您最喜欢的图像应用程序,例如 GIMP)。

    否则,您可以使用 BufferedImage API 直接更改 ImageIO 返回的 BufferedImage 中的像素:setRGB(int ARGB) 及其在 BufferedImage 的 Raster 中的批量操作表亲。

    【讨论】:

      【解决方案3】:

      一种适用于所有图像类型(只要它们支持 alpha)、速度非常快且不会禁用图像硬件加速的方法是:

      BufferedImage image = ...; // From somewhere
      
      Graphics2D g = destination.createGraphics();
      try {
          g.setComposite(AlphaComposite.Clear);
          g.fillRect(x, y, w, h); // Area to make transparent
      }
      finally {
          g.dispose();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多