衰落像素[]不会完全淡化黑色(使用位移算法)。我怎么能完全做到?

时间:2017-03-11 02:12:53

标签: processing transparency fade alpha pixels

我想将像素[]中的褪色像素复制到f.pixels [](我的PGraphics对象),然后将f图像重新绘制到显示器上。在draw()中反复这样做是为了将白色矩形淡化为黑色以匹配背景,但它并没有一直消失。

它稍微平滑地褪色,但随后它会以某种灰色停止褪色。 fade_amount越低,它最终消失的越少。

如何让白色方块一直淡入黑色?为什么不用这段代码呢?

谢谢!

P.S。我在那里有Pgraphics f对象,因为我想在这个项目的后期有一个屏幕外绘图缓冲区,所以我可以创建一个反馈循环,包括在复制过程中进行转换,以便像将电视上显示的相机指向电视时那样。

此外,这是在处理1.5.1中编写的,它是在我的计算机上运行的最新版本。

PGraphics f;
int win_size = 1000;

void setup(){
  size(win_size, win_size);
  f = createGraphics(width, height, P2D);
  background(0,0,0);
  stroke(255,255);
  rect((win_size/2) -40, (win_size/2) -40, 80, 80);
}

void draw(){
  fade_and_copy_pixels(f); //fades window pixels and then copies pixels to f
  background(0,0,0);
  image(f,0,0);
}

void fade_and_copy_pixels(PGraphics f){
  loadPixels();  //load windows pixels
  f.loadPixels(); //loads 2nd layer pixels

  // Loop through every pixel in window
  for (int i = 0; i < pixels.length; i++) {
      color p = pixels[i];
      // get alpha value
      int a = (p >> 24) & 0xFF ;
      // reduce alpha value
      int fade_amount = 5;//at 2 it fades about half way to black, the higher the fadeamount the more it fades. weird
      a = max(0, a-fade_amount); 
      // assign color with new alpha-value
      p = (a<<24 | p & 0xFFFFFF) ;
      f.pixels[i] = p;
  }
  updatePixels(); //dont need because I am not wanting to directly edit pixels[]
  f.updatePixels(); 
}

0 个答案:

没有答案