【问题标题】:Java Graphics2D: semi-transparency turns black when using blur filter on shapeJava Graphics2D:对形状使用模糊滤镜时,半透明变黑
【发布时间】:2018-03-11 14:01:30
【问题描述】:

我正在使用 Java Graphics2D 和 JH Labs 的高斯过滤器来模糊我在透明图像中绘制的一些形状。我注意到形状的模糊边界变成了黑色,更像是一个投影。相反,它应该逐渐变得更加透明,让背景颜色透出来。

以下是相关的代码行:

BufferedImage bi = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();

// Draw shape
g2d.fillRect(x, y, shapeWidth, shapeHeight);

// Apply gaussian filter
BufferedImage bi2 = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_ARGB);
GaussianFilter gaussianFilter = new GaussianFilter();
gaussianFilter.setRadius(10.0f);
gaussianFilter.filter(bi, bi2);
bi = bi2;

知道黑色是从哪里来的吗?更重要的是,我该如何摆脱它?

【问题讨论】:

    标签: java filter blur graphics2d


    【解决方案1】:

    我不确定这个问题是否仍然相关。我遇到了一篇关于模糊的文章,特别是在涉及 alpha 通道时,作者准确地描述了你在问题中提到的现象。以下是作者写的:

    原因是我们分别模糊了每个通道,但是在哪里 Alpha 通道为零(透明位),红色、绿色和 蓝色通道为零或黑色。当你做模糊时,黑色得到 与不透明的部分混合在一起,你会得到一个暗影。解决方案 是在模糊之前预乘图像 alpha 并取消预乘 然后。当然,如果您的图像已经预乘, 一切就绪。

    您可以查看http://www.jhlabs.com/ip/blurring.html 了解更多信息。 希望这会有所帮助

    【讨论】:

    • 嗨@Neckelatius,不幸的是这个问题不再相关,但非常感谢您的回答!这听起来像是一个非常合理的解释。如果我再次遇到类似问题,我一定会记住这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多