非常に単純なはずの何かに問題があります。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);
}
0.01 のアルファ (不透明度 1%) で塗りつぶされた白いボックスを互いに重ねて描画し、描画領域の中心のアルファが何であるかをテストします。これは、0%、1%、2%、3% ... 100% のように増加するはずだと思いました。ただし、代わりにゆっくりと 83.5% に収束し、奇妙に増加しなくなります。これは AlphaComposite に関係していると思いますが、単純な線形 alphaNEW = alphaDST + alphaSRC 操作を成功させる方法を無限に見つけようとしました。ただし、0.5 以上のアルファは中心で 1.0 に達しますが、私が望むほど直線的ではありません。すべてのコンポジットは、ソースピクセルと宛先ピクセルに「アルファ」および/または「1 - アルファ」という形式を使用しているようです...アイデアはありますか?
乾杯 :)
編集:私が達成しようとしているのは、線形(1%、2%、3%の不透明度...)であり、最終的に1%の不透明ペイントで同じ領域を何度もペイントした場合のPhotoshopの動作と似ていません不透明度 100% に達し、80% で止まらない!