Eclipse
を使って、Processing
をコーディングしたい。むしろ、Java
プログラムの1要素としてProcessingを利用したい場合があります。Javaの無限のライブラリも使えますので。
例えば、Processingでwebカメラの映像をキャプチャさせて、それをJavaでゴニョゴニョしたいとき。
もちろん、ProcessingのライブラリをEclipseにインポートするのですが、
横着なやり方を紹介します。
(1) Processing.app内のライブラリをどっかにごっそりコピー
%cp -r /Applications/Processing.app/Contents /Users/ユーザ名/Desktop/
もしくは、Finderを使って、Processing.appの中身(パッケージの中身)をどっかにコピー
例ではデスクトップにコピーしてますが、どこでもいいです。
なぜコピーするかというと、以下のeclipseの外部ライブラリ追加のところで直接Processing.app内のリソースへアクセスができなかったからです。
だから、横着にコピーしました。
(2) Eclipseから新規プロジェクト作成し、メニューのProject -> Properties でProcessingライブラリへBuild Pathを設定。
Add External JARs(外部ライブラリの追加)から、さっきコピーした中身にあるProcessingのライブラリを追加。
Processingの基本ライブラリは
コピーしたディレクトリの中の
Contents/Resources/Java/core/library
内に、カメラから映像キャプチャなどのライブラリは、
Contents/Resources/Java/modes/java/libraries/
以下、例えばvideo関係は
Contents/Resources/Java/modes/java/libraries/video/library
内にあります。
こんな感じ。
(3) 後はコードを書くだけ。
例えば、ProcessingサンプルのWEBカメラから画像をキャプチャして表示するプログラムは、こんな感じです。
import processing.video.*;
import processing.core.*;
public class VideoCapTest extends PApplet{
Capture cam;
public void setup() {
size(640, 480, P2D);
String[] cameras = Capture.list();
if (cameras.length == 0) {
println("There are no cameras available for capture.");
exit();
} else {
println("Available cameras:");
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}
// The camera can be initialized directly using an element
// from the array returned by list():
cam = new Capture(this, cameras[0]);
cam.start();
}
}
public void draw() {
if (cam.available() == true) {
cam.read();
}
image(cam, 0, 0);
// The following does the same, and is faster when just drawing the image
// without any additional resizing, transformations, or tint.
//set(0, 0, cam);
}
}
おまけ
Processingからカメラでキャプチャした画像を、BufferedImageへ変換の例。
BufferedImage buf =
new BufferedImage(320,240, 1);
buf.getGraphics().drawImage(cam.getImage(),0,0,null);