【问题标题】:AlphaComposite - alpha value convergesAlphaComposite - alpha 值收敛
【发布时间】:2013-10-03 03:04:59
【问题描述】:

我遇到了一些应该很简单的问题。我正在将 1% 的不透明盒子叠加在一起。在 100 次绘画之后,我预计不透明度会达到 100%,但是不透明度(alpha 值)会收敛到 100% 以下并停止增加。为了演示这个问题,我将代码简化为:

    BufferedImage bi = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = bi.createGraphics();

    float alpha = 0.01f;
    Color c = new Color(1.0f, 1.0f, 1.0f, alpha);
    g2.setColor(c);

    while (true) {
        g2.fillRect(0, 0, 10, 10);
        System.out.println(new Color(bi.getRGB(5, 5), true).getAlpha() / 255f);
        Thread.sleep(50);
    }

它以 0.01(1% 的不透明度)的 alpha 绘制填充的白色框,然后测试绘图区域中心的 alpha 是多少。我认为这应该像这样增加:0%、1%、2%、3% ... 100%。然而,相反,它慢慢收敛到 83.5% 并奇怪地停止增加。我认为这与 AlphaComposite 有关,但我无休止地尝试找到一种方法来制作简单的线性 alphaNEW = alphaDST + alphaSRC 操作但没有成功。然而,0.5 或更高的 alpha 确实在中心达到 1.0 - 尽管不是我想要的线性。所有的合成似乎都对源像素和目标像素使用“alpha”和/或“1 - alpha”格式......有什么想法吗?

干杯:)

编辑:我想要实现的是线性的(1%、2%、3% 不透明度......),并且与如果你用 1% 不透明一遍又一遍地绘制相同区域的 Photoshop 操作方式没有什么不同绘制它最终达到 100% 不透明,它不会停止在 80%!

【问题讨论】:

  • 您是否尝试将RenderingHints.KEY_ALPHA_INTERPOLATION 设置为VALUE_ALPHA_INTERPOLATION_QUALITY(使用g2.setRenderingHint(...)?可能是舍入错误。不确定是否有效果,但值得探索。

标签: java graphics bufferedimage alpha composite


【解决方案1】:

默认情况下,Alpha 堆肥不是“添加剂”。通常,最终的 alpha 计算为“in”运算符。 wiki 对此有更多信息。但是,如果您想要添加堆肥,您可能必须实现自己的custom composting function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多