画像データのコピー

ものすごいCPU負荷かかってるなーと思ったらレンダラーをデフォルトのJAVA2Dにしてるせいらしい。
解像度を800*600以上にしただけでCPU負荷が100%状態。
OPENGL使うと凄い軽いんだけど全部描画コードをOPENGLに書きかえないといけないのが苦しい。


仕方ないのでP3Dを使うことになったんだけど、このモードだと smooth() が使えない。
文字のアンチエイリアスすらしてくれないので表示するとものすっごい汚い。

仕方ないので一度JAVA2Dで描画したあとでっかいPImage用意してそちらに写しかえる。

size(640, 480, P3D);
background(120);
int size = 32;
int w = size*2, h = size*3;
int len = 5;
color col = color(255, 0, 0);
color bgc = color(255);

PGraphics g = createGraphics(w,h,JAVA2D);
g.beginDraw();
g.smooth();
g.noStroke();
g.textFont(createFont("FixedSys", size));

g.fill(col);
g.rect(0, 0, w, h);
g.fill(bgc);
g.rect(len,len,w-(len<<1),h-(len<<1));
g.fill(col);

String str = "★";
int x =(w>>1)-((int)g.textWidth(str)>>1);
g.text(str, x, 40);
str = "K";
x =(w>>1)-((int)g.textWidth(str)>>1);
g.text(str, x, 75); 

g.endDraw();

PImage img = new PImage(w, h);
img.set(0, 0, g);

image(img, 0, 0);
image(g, w, 0);

左が写したPImageで右がJAVA2Dで描画したPGraphics。無事コピペ完了。



追記

image() で表示したとき画像が微妙に割れていたのはP3Dの上にJAVA2Dで描画したせいかもだと思ってたんだけど、どうやらレンダラーをP3Dにしたあとも smooth() を消すの忘れてたせいらしい。


もしかしたら普通にP3Dの上にJAVA2Dの画像を貼っても問題ないかもしれない!勝手に変換してくれるような感じがします。一応内部でなにしてるのか分からないので全部手動でJAVA2DのPGraphicsで描画してPImageに変換みたいなしていこうとは思いまつ。