AlphaComposite - alpha值收敛

时间:2013-09-26 23:13:39

标签: java graphics bufferedimage alpha composite

我遇到的问题应该很简单。我正在将1%不透明的盒子涂在彼此之上。在100次涂料之后,我预计不透明度将达到100%,但不透明度(α值)收敛于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);
    }

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

干杯:)

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

1 个答案:

答案 0 :(得分:1)

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