用颜色填充复杂图像

时间:2016-06-27 21:56:27

标签: java graphics png fill edge-detection

假设我有一个透明的PNG图像,如下所示: sword with transparent background

我希望在Java中只用黑色填充对象,如下所示: sword filled with black

这在Photoshop中是一个相当简单的过程,但这是一个我想经常重复的过程,理想情况下不会为我想要的每个对象制作黑色填充图片。我尝试了几个边缘检测课程但没有成功。

我将如何做到这一点?

其他信息:这将是一种创建阴影的快捷方式。如果你能想出更好的方法,那就可以完全解决这个问题。

2 个答案:

答案 0 :(得分:2)

你可以创建一个遍历所有像素的函数,并用黑色填充它们。

BufferedImage image = ...
Color fillColor = new Color(0, 0, 0); // Black

for (int y = 0; y < image.getHeight(); y++) {
    for (int x = 0; x < image.getWidth(); x++) {
        int color = image.getRGB(x, y);
        int alpha = (color >> 24) & 0xff;

        if (alpha == 255) {
            image.setRGB(x, y, fillColor.getRGB());
        }
    }
}

显然,这只适用于完全不透明的像素。如果顶部的图像包含一些透明度,您还可以将条件更改为更宽容:if (alpha > 127)。这将填充透明度小于50%的所有像素。

答案 1 :(得分:0)

在Photoshop中,您可以使用名为Actions的内容。 This can get you started。由于每个PNG文件的主层都称为第0层,因此这适用于每个文件。记录将第0层的图层样式设置为黑色的操作。然后保存文件并停止记录操作。使用文件&gt;&gt;自动化&gt;&gt;批量在许多文件上执行此操作。如果你犯了错误,我建议保存文件的备份。

相关问题