【问题标题】:Processing saveFrame every 40 msec每 40 毫秒处理一次 saveFrame
【发布时间】:2020-05-22 21:42:01
【问题描述】:

我正在尝试以 25 帧/秒的速度创建与视频同步的图形。我试图每 40 毫秒保存一帧,但我无法每秒保存 25 帧,但只能保存一张图像。 有人可以帮我吗?

int t1;
int count;

void setup(){
  size(400,100);
  background(0);
  stroke(255);
  fill(250);
  line(10,0,10,100);
  line(260,0,260,100);

  for (int i=10;i<251;i+=10){

    t1=millis();
    while(millis()-t1 < 40) {
      count++;
    }
    rect(10,50,i,10);
    //saveFrame("line-####.png");
  }
}

void draw(){}

【问题讨论】:

    标签: processing


    【解决方案1】:

    您的代码中的问题是画布仅在帧结束后更新,这意味着您的矩形确实存在,但直到您的 setup() 结束时才会显示。这就是为什么即使您的代码在绘制新矩形之前正确等待 40 毫秒,在 for 循环结束之前什么都不会显示:在结束帧之前,处理正在等待完成 for 循环。

    但是,在Processing中draw()每秒被调用一定的次数,这个次数是由函数frameRate()指定的(默认是60 )。
    因此,您只需将 frameRate 设置为 25 并在每次调用 draw() 时保存一张图像。
    noLoop() 用于停止调用 draw( ),在这种情况下,一旦矩形全部绘制完毕。

    int count;
    
    void setup()
    {
      frameRate(25);
      size(400,100);
      background(0);
      stroke(255);
      fill(250);
      line(10,0,10,100);
      line(260,0,260,100);
    }
    
    void draw()
    {
      rect(10,50,count,10);
      saveFrame("line-####.png");
      count += 10;
      if(count > 251)
      {
        noLoop();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 2014-07-13
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多