やっと出た! 公式版のProcessingを動画で確認しよう:絵心がなくても簡単に絵が描けるProcessing(最終回)(2/3 ページ)
7年の時を経て、先月正式版がリリースされた描画プログラミング環境のProcessing。動画でプログラムを見てみよう
外部ライブラリを使用する方法
Processingのプログラムで外部ライブラリを使用する場合、ライブラリのアーカイブを展開したフォルダを所定のライブラリフォルダ(※)にインストールした後、プログラムの最初でライブラリの使用を宣言する必要があります(通常のJavaでのimport文と同様です)。ライブラリが正しくインストールされていれば、Processingエディタのメニュー[Sketch]→[Import Library...]からライブラリが選択できるようになり、選択することでプログラムの冒頭にライブラリ宣言行を追加できます。
※外部ライブラリのインストールフォルダは、Processing 1.0のバージョンアップに伴い従来のProcessingインストールフォルダから「Sketchbook」フォルダ(Mac OS Xならば「書類」フォルダ内、Windowsならば「マイドキュメント」フォルダ内の、「Processing」フォルダ)に変更されました。前バージョンの方法に慣れている方は注意してください。
Videoライブラリを使ってみよう
それでは実際に外部ライブラリを使用したプログラミングを始めてみましょう。まず今回はVideoライブラリを使用して、USBカメラ映像を取り込むサンプルを紹介します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Windows版ProcessingでVideoライブラリを使用する場合は、QuickTimeとWinVDIGドライバ(1.0.1)のインストールが必要となります。詳しくはVideoライブラリのページを参照してください。
現在WinVDIGの公式サイトがサポートされない状態となっているため(ミラーサイトからダウンロード自体は可能になっています)、WinVDIGを必要としないカメラライブラリ「JMyron」を使用するサンプルも用意しました。場合によってはこちらを参考にしてください。
JMyron
http://webcamxtra.sourceforge.net/
JMyron版サンプル
video_sample_jmyron.pde
シンプルにUSBカメラの動画を画面に表示するサンプルですが、プログラムも非常にシンプルに書けることが分かります。Videoライブラリに含まれているカメラを制御するクラス「Capture」はフレーム画像を読み込むことで、通常の画像クラス(PImage)と同様に画面に表示したり、ピクセル操作を行えます。このサンプルではdraw関数(前回記事で説明したように、プログラム実行中に決められたフレームレートで繰り返し呼び出されるメインループ関数です)で画像を画面に描画するimage命令でカメラ画像を画面にそのまま描画しているわけです。
プログラムに少し手を加えてみましょう。今度はカメラ画像をピクセル単位で扱うようにします。
<前半は上記のソースコードと同じです>
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
JMyron版サンプル
video_sample2_jmyron.pde
実際にカメラを使って実行したサンプル動画をご覧ください。動画の映像がライン単位で更新されるのが分かると思います。
カメラ画像をピクセル単位で扱うソースコードでは「loadPixels」「updatePixels」という命令が使用されています。これらはProcessingで画面のピクセル処理を開始し、それを実際の画面に反映するための命令です。ピクセル処理を開始し反映するタイミングを命令で明示することで、高速なピクセル処理を実現しています。
loadPixelsを実行すると、「pixels」というグローバル変数の配列に、画面全体のピクセル(色)情報が読み込まれます。今回のサンプルのようにdraw関数の最初でloadPixelsを実行すれば、pixels配列に読み込まれるのは前回のdraw関数の実行で描画されたフレームの最終状態です。注意が必要なのはpixels配列がラインごとのピクセル情報を直列にした1次元配列として読み込まれるため、画面の任意のX、Y座標の点をpixels配列で指定するためには(※1)行のような計算で求める必要があります。
そしてランダムに決めたY座標の画面左端から右端までの1ラインのピクセル情報を、現在のUSBカメラのキャプチャ画像の同じラインのピクセル情報に書き換える処理を行っています。loadPixels命令は画面の状態をpixelsに読み込むのに加えて、プログラムで使用されている画像オブジェクトのピクセル情報もオブジェクトのpixels変数として読み込む仕組みになっているため、(※2)行のように特別な指定なしにキャプチャ画像のピクセル情報を「cam.pixels」として指定できます。
Copyright © ITmedia, Inc. All Rights Reserved.