【问题标题】:How do I set a certain color (0xFF00FF) in a BufferedImage to transparent?如何将 BufferedImage 中的某种颜色 (0xFF00FF) 设置为透明?
【发布时间】:2013-10-29 22:38:51
【问题描述】:

我在使用 Java 构建的视频游戏中遇到了一个相当麻烦的问题。在您将其设置为垃圾邮件之前,请注意我已经查看了这两个链接,但它们对我没有任何帮助:

  1. Drawing a transparent BufferedImage over a non-transparent BufferedImage
  2. Making a Certain Color on a BufferedImage Become Transparent

我需要做的是从我的精灵中获取颜色 0xFF00FF 并将其设置为透明,以便角色出现,而不仅仅是他身后的背景。这是我所拥有的:

(抱歉没有足够的“声誉”,但这里有图片链接。) https://plus.google.com/photos/yourphotos?enfplm&hl=en&utm_source=lmnavbr&utm_medium=embd&utm_campaign=lrnmre&rtsl=1&partnerid=selm0&pid=5940308896707611042&oid=114903427794927596233

我有一个主 BufferedImage 和一个用于该图像中数据的像素 [] 数组,我将关卡渲染到屏幕上,然后渲染播放器。这是我在渲染之前更新图像的方法:

private void tickImage() {

    final int centerY = (HEIGHT / 2) - (48 / 2);
    final int centerX = (WIDTH / 2) - (48 / 2);

    display.clear();
    display.renderBlock(StoneBlock.block, xMove, yMove);

    display.renderPlayer(knight, centerX, centerY);

    for (int a = 0; a < pixels.length; a++) {
        pixels[a] = display.pixels[a];
    }
}

如果您想查看其余代码,请随时到这里:

https://github.com/NikolaAndMichael/WarDungeon/tree/master/WarDungeon/src/net/naprav/wardungeon

提前谢谢你。

【问题讨论】:

    标签: java transparency bufferedimage


    【解决方案1】:

    像这样:

    BufferedImage img = ...;
    for (int x = 0; x < img.getWidth(); ++x)
    for (int y = 0; y < img.getHeight(); ++y)
    {
       if ((img.getRGB(x, y) & 0x00FFFFFF) == 0xFF00FF) 
       {
           img.setRGB(x, y, 0);
       }
    }
    

    它的作用是遍历每个像素并测试红色、绿色和蓝色分量以匹配0xFF00FF。如果匹配,请将颜色设置为透明黑色 (0x00000000)。为了只测试 RGB 通道而不测试 Alpha 通道,请使用按位运算符过滤掉 Alpha 通道数据。

    【讨论】:

    • 哈哈哈。我懒洋洋的。显然,我也回答了链接的问题。
    • 嘿伙计,我不想说它没用。我试过了,我使用的是“TYPE_INT_RGB”BufferedImage,如果你愿意的话,按位运算符并不是我的强项。请帮忙?
    • 这段代码修改了缓冲的图像。如果您 100% 确定缓冲图像确实包含那些 0xFF00FF 颜色,那么这应该可以工作。也许您使用的是 JPG 精灵,导致颜色不准确?但是,您为什么不简单地在图像文件本身中使用透明度,而不是使用已弃用的丑陋粉色技巧?
    猜你喜欢
    • 2011-11-16
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多