【作品No.37】画像の色を読み取って膨張する台形【Processing 2025年2月17日】

【作品No.37】画像の色を読み取って膨張する台形【Processing 2025年2月17日】
  • URLをコピーしました!

この記事を書いた人

ワタタク(Watataku)
  • クリエイティブコーダー / アーティスト
  • 「人の心に寄り添う、機能するアート」を探究しています
  • アートとテクノロジーが、社会や個人のウェルビーイングにどう貢献できるかに、関心があります

目次

作品の画像とコード

【作品No.37】画像の色を読み取って膨張する台形【Processing 2025年2月17日】

アニメーション。

参考サイト様は円を膨張させています。

僕は台形を膨張させてみました。

// 参考にさせていただいたページとURL
// 第6回: 画像の分析・再合成
// (画像データ、ピクセル、ラスタ画像)
// 2018年5月24日
// 東京藝術大学藝術情報センター(AMC)
// 担当: 田所 淳
// https://drive.google.com/file/d/1RbTZUtU_svu32m8kBjl6AKaK0jfs2-Gq/view

ArrayList<Trapezoid> trapezoids;
PImage img;
int maxSize = 100;

void setup() {
  size(600, 600);
  frameRate(60);
  noStroke();
  
  trapezoids = new ArrayList<Trapezoid>();
  img = loadImage("dogs.jpg");
  img.resize(width, height);
  for (int i = 0; i < 10; i++) {
    PVector loc = new PVector(random(width), random(height));
    trapezoids.add(new Trapezoid(loc));
  }
}

void draw() {
  background(0);
  for (int i = 0; i < trapezoids.size(); i++) {
    trapezoids.get(i).drawTrapezoid();
  }
  for (int i = 0; i < trapezoids.size(); i++) {
    if (trapezoids.get(i).isDead == false) {
      boolean expand = trapezoids.get(i).checkPixel();
      if (expand == false) {
        PVector loc;
        while (true) {
          loc = new PVector(random(width), random(height));
          color c = get(int(loc.x), int(loc.y));
          if ((red(c) + blue(c)) == 0) break;
        }
        
        trapezoids.add(new Trapezoid(loc));
        trapezoids.get(i).isDead = true;
      }
    }
  }
}

void mouseClicked() {
  trapezoids.clear();
  for (int i = 0; i < 100; i++) {
    PVector loc = new PVector(random(width), random(height));
    trapezoids.add(new Trapezoid(loc));
  }
}

class Trapezoid {
  float size;
  float expandSpeed;
  color trapezoidColor;
  PVector location;
  boolean expand;
  boolean isDead;
  
  Trapezoid(PVector _location) {
    location = _location;
    
    size = 0;
    expandSpeed = 4.0;
    expand = true;
    isDead = false;
    
    trapezoidColor = img.get(int(location.x), int(location.y));
  }
  
  void drawTrapezoid() {
    if (expand == true) {
      size += expandSpeed;
    }
    
    fill(trapezoidColor);
    beginShape();
    vertex(location.x - size / 2, location.y - size / 4);
    vertex(location.x + size / 2, location.y - size / 4);
    vertex(location.x + size / 4, location.y + size / 4);
    vertex(location.x - size / 4, location.y + size / 4);
    endShape(CLOSE);
  }
  
  boolean checkPixel() {
    float nextSize = size + expandSpeed;
    for (float i = 0; i < TWO_PI; i += 0.01) {
      int x = int(cos(i) * nextSize / 2.0 + location.x);
      int y = int(sin(i) * nextSize / 2.0 + location.y);
      color c = get(x, y);
      if ((red(c) + blue(c) + green(c)) > 0 || size > maxSize) {
        expand = false;
      }
    }
    return expand;
  }
}

// sかSを押すことで、xの位置とyの位置をファイル名につけて保存する
void keyPressed() {
  if (key == 's' || key == 'S') {
    String filename = "saved_image_x" + mouseX + "_y" + mouseY + ".png";
    saveFrame(filename);
  }
}

}
ワタタク

それでは今日もレッツワクワクコーディング。

ワタタク(Watataku)
クリエイティブコーダー/アーティスト
AIと共に、「人の心に寄り添う、機能するアート」を探究しています。

ここは、その思索と創造の全記録を記す、思考の実験室(アトリエ)です。

僕の創作の源泉は、人生経験そのものです。
不当な出来事や、精神的な支配の中で、私の心は何度も粉々に砕け散りました。しかし、その一つ一つの破片をどのようにすれば鮮やかな絵の具にできるかを考え、ゆっくり心のパレットに色を整えていきました。その、長い、長い、自身との対話の果てに「人の役に立つアートを作りたい」という考え方にたどり着きました。

かつて、僕の武器は、アコースティックギター弾き語りと、カメラでした。
オリジナルソングの演奏でお客様投票1位となった「物語の力」。
世界20カ国の旅で培った、多様な「視点」。

今、僕は、それら全ての経験を、「コード」という、新しい言語で、世界に問いかけています。

このブログでは、作品の制作過程や、日々の発見、そして、僕自身の上達の軌跡を記録していきます。

僕の旅が、あなたの日常を、ほんの少しでも豊かにするための、光になることを願って。

クリエイティブコーディングロード運営者 ワタタク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次