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
32
33
34
35
36
37
38
39
40
| import processing.video.*;
Capture video;
void setup() {
// 640 x 480が大きすぎて遅かったら、320 x 240に変更する
size(640, 480);
//画面サイズのキャプチャ画像を生成。画面がコマ落ちするようだったら、
//一番右のフレームレートを上げる。
video = new Capture(this, width, height, 90);
loadPixels(); //画面に画像のピクセルを展開
}
void draw() {
background(0);
if (video.available()) { //もしキャプチャができたら、
video.read(); //ビデオフレームの読み込み
video.loadPixels(); //ビデオのピクセルを操作できるようにする
//1ピクセルごとに色を調べる。
for (int y = 0; y < video.height; y ++) {
for (int x = 0; x < video.width; x ++) {
//ビデオのピクセルを抜き出す
int pixelColor = video.pixels[y*video.width + x];
//赤、緑、青をそれぞれ抽出する。以下の3行はビットシフトといって、
//理解するのが結構大変なので、ここでは詳細は説明しない。
int r = (pixelColor >> 16) & 0xff;
int g = (pixelColor >> 8 ) & 0xff;
int b = pixelColor & 0xff;
//ウィンドウのピクセルに当てはめる
//画像を反転させるため、"video.width-x-1"という式を使っている
pixels[y*video.width + video.width-x-1] = color(r, g, b);
}
}
updatePixels(); //画像を更新
}
} |
import processing.video.*;
Capture video;
void setup() {
// 640 x 480が大きすぎて遅かったら、320 x 240に変更する
size(640, 480);
//画面サイズのキャプチャ画像を生成。画面がコマ落ちするようだったら、
//一番右のフレームレートを上げる。
video = new Capture(this, width, height, 90);
loadPixels(); //画面に画像のピクセルを展開
}
void draw() {
background(0);
if (video.available()) { //もしキャプチャができたら、
video.read(); //ビデオフレームの読み込み
video.loadPixels(); //ビデオのピクセルを操作できるようにする
//1ピクセルごとに色を調べる。
for (int y = 0; y < video.height; y ++) {
for (int x = 0; x < video.width; x ++) {
//ビデオのピクセルを抜き出す
int pixelColor = video.pixels[y*video.width + x];
//赤、緑、青をそれぞれ抽出する。以下の3行はビットシフトといって、
//理解するのが結構大変なので、ここでは詳細は説明しない。
int r = (pixelColor >> 16) & 0xff;
int g = (pixelColor >> 8 ) & 0xff;
int b = pixelColor & 0xff;
//ウィンドウのピクセルに当てはめる
//画像を反転させるため、"video.width-x-1"という式を使っている
pixels[y*video.width + video.width-x-1] = color(r, g, b);
}
}
updatePixels(); //画像を更新
}
}