mieki256's diary



2024/10/30(水) [n年前の日記]

#1 [proce55ing][processing] ProcessingのPGraphicsの動作を確認

Processing (Proce55ing) の PGraphics の動作について確認してみた。

PGraphics というのは、イメージバッファと言うか、フレームバッファと言うか…。 PGraphicsを使えば、透明部分を持った状態でファイル保存できるので、アルファチャンネル付き画像を得られるはず。

環境は Windows10 x64 22H2 + Processing 4.3。

ソース :

_sketch_20241026a_pgraphics_test.pde
// PGraphics save sample

PGraphics pg;
PImage img;
PImage bg;
int scrw;
int scrh;
float ang = 0;
boolean exitfg = false;
boolean saveframe_enable;
int sframecount;

void setup() {
  size(512, 288, P2D);
  scrw = width;
  scrh = height;
  println("size=" + scrw + "," + scrh);

  frameRate(24);

  img = loadImage("./chara.png");
  bg = loadImage("./bg.png");
  pg= createGraphics(scrw, scrh, P2D);
  exitfg = false;
  saveframe_enable = false;
  sframecount = 0;
}

void draw() {
  background(40, 80, 160);

  //draw to PGraphics
  pg.beginDraw();
  pg.clear();
  pg.push();
  pg.imageMode(CENTER);
  float x =(scrw / 2) * 0.9 * sin(radians(ang * 2.0)) +(scrw / 2);
  float y =(scrh / 2) * 0.9 * sin(radians(ang * 5.0)) +(scrh / 2);
  pg.translate(x, y);
  pg.rotate(radians(ang));
  pg.image(img, 0, 0);
  pg.pop();
  pg.endDraw();

  // draw Background
  image(bg, 0, 0);
  
  // draw PGraphics to canvas
  image(pg, 0, 0);

  if (saveframe_enable) {
    String fn = "frames/" + get_seq(sframecount, 8) + ".png";
    noStroke();
    fill(255);
    textSize(24);
    text("capture " + sframecount + " frame", 8, 24);
    text("save " + fn, 8, 48);
    pg.save(fn);

    sframecount++;
  }
  ang += 1.0;

  if (exitfg) {
    exit();
  }
}

void keyTyped() {
  if (key == 's') {
    // frame save enable / disable
    saveframe_enable = !saveframe_enable;
    if (saveframe_enable) sframecount = 0;
  }
  else if (key == 'q') {
    // set exit
    exitfg = true;
  }
}

String get_seq(int n, int k) {
  String s = "000000000000" + n;
  return s.substring(s.length() - k);
}

使用画像。

_bg.png
_chara.png

実行結果 :

実行すると以下のような見た目になる。

sketch_20241026a_pgraphics_test_ss.gif


動いてる部分が PGraphics に描画してる部分。BGと書かれているのがウインドウに直接描画している部分。
  • PGraphics に画像(chara.png)を描画することができている。
  • その PGraphics をウインドウ内に描画できている。
  • PGraphics が透明部分を持っているので、背景(bg.png)も見えている。

更に、Sキーを押すと、PGraphics の内容を frames/00000000.png - 99999999.png といった連番画像として保存できる。

sketch_20241026a_pgraphics_test_ss2.gif


保存した連番画像をAPNGにしてみた。

out.png

PGraphics が透明部分を持っているので、アルファチャンネル付きの連番画像として保存されていることが分かる。

そんなわけで、一旦 PGraphics に描画して、その PGraphics をウインドウ内に描画する作りにしておけば…。その PGraphics を連番画像として保存する処理を追加することで、Processing の描画結果を動画編集の素材として使えるようになるのではないかな、と妄想しているところ。

以上です。

過去ログ表示

Prev - 2024/10 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project