我有問題應該很簡單。我正在繪製1%不透明的盒子。經過100次塗料後,我預計不透明度會達到100%,但不透明度(alpha值)會收斂到100%以下,並停止增加。爲了說明這個問題,我已經簡化了我的代碼如下:AlphaComposite - 阿爾法值收斂
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,儘管不是我想要的線性。所有的複合材料似乎都使用格式「alpha」和/或「1-alpha」作爲源和目標像素......任何想法?
乾杯:)
編輯:我想要達到的目的是什麼線性(1%,2%,3%的不透明度...)並沒有什麼不同,如果你畫一樣的Photoshop將如何運作面積反覆使用1%不透明油漆,最終達到100%不透明度,但不會停止在80%!
您是否嘗試將['RenderingHints.KEY_ALPHA_INTERPOLATION'](http://docs.oracle.com/javase/7/docs/api/java/awt/RenderingHints.html#KEY_ALPHA_INTERPOLATION)設置爲「VALUE_ALPHA_INTERPOLATION_QUALITY」(使用'g2.setRenderingHint(...)'?可能是舍入錯誤,不確定它是否有效果,但值得探討。 – haraldK