3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Processingで丸い画像を表示する

Posted at

はじめに

こんにちは.ohayotaです.
この記事では,Processingで丸い画像を表示する方法を紹介します.
(画像自体を丸く加工する方法ではなく,画像を丸く見せる方法を扱います.)
内部を円形に切り抜いた正方形を,画像の上に描画して実現しようと思います.

準備

以下で扱うプログラム用に,600px * 600pxのダミー画像を用意します.
同じディレクトリ内に「data」というディレクトリを作成し,その中にdummy600.pngという名前で保存します.
dummy600.png

プログラム

以下が正方形の画像を丸く表示するプログラムです.
setup()内などに記述して実行します.

CroppedImage.pde
PImage img = loadImage("dummy600.png");
color backColor = color(240);

size(600, 600);
image(img, 0, 0, width, height);

pushMatrix();
translate(width/2, height/2);
fill(backColor);
noStroke();
beginShape();
// 図形の外枠
vertex(-width/2, -height/2);
vertex(width/2, -height/2);
vertex(width/2, height/2);
vertex(-width/2, height/2);
// 切り抜く図形の描画
beginContour();
for (int i = 360; 0 < i; i--) {
  vertex(width/2 * cos(radians(i)), height/2 * sin(radians(i)));
}
endContour();
endShape(CLOSE);
popMatrix();

実行後

画像がしっかり丸く表示されましたね.
CroppedDummy.jpg

解説

PImage img = loadImage("dummy600.png");
color backColor = color(240);

loadImageを使って,指定した画像名をdataディレクトリから読み込みます.
backColorは背景色に合わせます.

size(600, 600);
image(img, 0, 0, width, height);

今回扱う画像が 600px * 600px のため,size(600, 600)でウィンドウサイズも同じにします.
image(img, 0, 0, width, height)で左上(0, 0),縦横ともに600pxの画像を表示します.

pushMatrix();
...
popMatrix();

pushMatrix()で,この文より前の時点の座標系を一時的に保存します.
描画を終えたらpopMatrix()で座標系をpushMatrix()より前のものに戻します.

translate(width/2, height/2);
fill(backColor);
noStroke();

図形の内部を円形に切り抜く準備として,translate(width/2, height/2)で基準点をウィンドウの中心にします.

// 図形の外枠
vertex(-width/2, -height/2);
vertex(width/2, -height/2);
vertex(width/2, height/2);
vertex(-width/2, height/2);

4つのvertexを使い,画像の上に描画する正方形を作ります.

// 切り抜く図形の描画
beginContour();
...
endContour();

beginContour()endContour()で囲んだ部分で,vertexを使って切り抜く図形を作ります.

for (int i = 360; 0 < i; i--) {
  vertex(width/2 * cos(radians(i)), height/2 * sin(radians(i)));
}

1度ごとにvertexを実行して,切り抜く円形を作ります.

endShape(CLOSE);

vertexの始点と終点を結びます.

他の方法(書き残し)

必要のないpixelを書き換えると,図形を被せなくてもよくなるかもしれない.
loadPixelupdatePixelあたりが使えるかも.

参考ページ

Language Reference (API) \ Processing 3+
Processingのvertexについて解説!
Processingで描ける図形まとめ

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?