Java AlphaComposite-alpha值收敛

Java AlphaComposite-alpha值收敛,java,graphics,bufferedimage,alpha,composite,Java,Graphics,Bufferedimage,Alpha,Composite,我在一些应该很简单的事情上遇到了问题。我把1%不透明的盒子一个一个地涂上。100次绘制后,我希望不透明度达到100%,但是不透明度(alpha值)收敛到100%以下并停止增加。为了演示此问题,我将代码简化为: BufferedImage bi = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = bi.createGraphics(); float alpha = 0.01f;

我在一些应该很简单的事情上遇到了问题。我把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%不透明度…),与Photoshop的操作方式没有什么不同,如果你用1%不透明的颜料一遍又一遍地画同一个区域,它最终达到100%不透明,它不会停止在80%

默认情况下,Alpha堆肥不是“添加剂”。通常,最终alpha作为“in”运算符计算。有更多关于这方面的信息。然而,如果你想要添加堆肥,你可能必须实施自己的

默认情况下,Alpha堆肥不是“添加剂”。通常,最终alpha作为“in”运算符计算。有更多关于这方面的信息。然而,如果你想要添加堆肥,你可能必须实施自己的

您是否尝试过将值设置为
ALPHA\u INTERPOLATION\u QUALITY
(使用
g2.setRenderingHint(…)
?可能是舍入错误。不确定是否有效果,但值得探讨。您是否尝试过将值设置为
ALPHA\u INTERPOLATION\u QUALITY
(使用
g2.setRenderingHint(…)
?可能是舍入错误。不确定是否有影响,但值得探讨。