为什么带有alpha的Processing`fill()`永远不会完全填充?

时间:2014-03-11 06:04:36

标签: processing

假设我们有以下代码:

void setup() {
    background(0);
    size(200, 200);
    fill(255);        
    rect(75, 75, 50, 50);
}  

void draw() {
    fill(0, 2);
    rect(0, 0, width, height);
}

即使在“永远等待”之后,白色50x50矩形仍然可见,尽管已经褪色。为什么fill(0, 2)最终无法掩盖这一点?

我认为这个问题有两个方面:

  • 为什么它最终不会褪色为黑色,因为为什么在白色顶部绘制另一个黑色矩形而不是最终删除它(我正在考虑放置有色窗户的线条相互之间;最终即使是最亮的光也不会发光,而且
  • 为什么它最终不会淡化为黑色,因为为什么处理社区会采取这种行为?

2 个答案:

答案 0 :(得分:2)

这是一篇解释正在发生的事情的帖子:http://processing.org/discourse/beta/num_1138703939.html

基本上,问题是Processing将颜色存储为int,但采用float参数。组合颜色时,Processing会将浮动数字舍入为整数。在你的情况下,你的颜色会被卡在63,63,63的值上,因为在这一点上,混合太小而不能产生在四舍五入后可以检测到的差异。

解决方案是从源头进行淡化,而不是在顶部覆盖alpha颜色。

答案 1 :(得分:-2)

默认背景颜色比分配给第一个矩形的颜色更暗,因此它会更快变黑。

  
      
  • 为什么不最终淡化为黑色,因为为什么在白色顶部绘制另一个黑色矩形而不是最终删除它   (我正在考虑在每个上面放置有色窗户   其他;最终即使是最亮的光也不会发光,而且
  •   
  • 为什么它最终不会淡化为黑色,因为为什么处理社区会采取这种行为?
  •   

另外,在您的原始代码(不是上面的示例)中,您可能会连续绘制白色矩形,因此它永远不会褪色。