【作品68】ピクセル化した画像のピクセルサイズをランダムにし、マウスクリックで位置が変わるようにする

【作品68】ピクセル化した画像のピクセルサイズをランダムにし、マウスクリックで位置が変わるようにする
  • URLをコピーしました!
この記事を書いた人
ワタタク
  • クリエイティブコーディングで制作した作品と、上達のためにやったこと・学習過程を発信
  • コンセプトは「クリエイティブコーディング1万時間の歩き方」
  • 2024年にProcessingの構文のアウトプットを終え、2025年から作品制作開始(クリエイティブコーディングで作成した作品集

目次

作品の画像とコード

アニメーション。

String sketchName = getClass().getName();

PImage[] imgs = new PImage[4];
float[] pixelSizes = new float[4]; // 各画像のピクセルサイズを格納する配列
float growthRate = 7; // サイズ変更の速さ

// ランダムな位置とサイズを格納する配列
int[] offsetsX = new int[4];
int[] offsetsY = new int[4];
int[] widths = new int[4];
int[] heights = new int[4];

void setup() {
  size(1080, 1080);
  frameRate(60);
  smooth();

  // 画像をロード
  imgs[0] = loadImage("5.jpg");
  imgs[1] = loadImage("6.jpg");
  imgs[2] = loadImage("7.jpg");
  imgs[3] = loadImage("8.jpg");

  // ランダムな位置、サイズ、ピクセルサイズを生成
  randomizeImageProperties();
}

void draw() {
  background(0);

  // 4つの画像を描画
  for (int i = 0; i < 4; i++) {
    drawImageAt(imgs[i], offsetsX[i], offsetsY[i], widths[i], heights[i], pixelSizes[i]);
  }

  // 各ピクセルサイズを更新
  for (int i = 0; i < pixelSizes.length; i++) {
    pixelSizes[i] += growthRate;
    if (pixelSizes[i] >= 50 || pixelSizes[i] <= 10) {
      growthRate *= -1; // 逆方向へ切り替え
    }
  }
}

void mousePressed() {
  // マウスクリック時にランダムにプロパティを更新
  randomizeImageProperties();
}

void randomizeImageProperties() {
  for (int i = 0; i < 4; i++) {
    widths[i] = int(random(300, width)); // 幅をランダムに
    heights[i] = int(random(300, height)); // 高さをランダムに
    offsetsX[i] = int(random(0, width - widths[i])); // X位置をランダムに
    offsetsY[i] = int(random(0, height - heights[i])); // Y位置をランダムに
    pixelSizes[i] = random(100, 200); // ピクセルサイズをランダムに
  }
}

void drawImageAt(PImage img, int offsetX, int offsetY, int imgWidth, int imgHeight, float pixelSize) {
  PImage resizedImg = img.copy();
  resizedImg.resize(imgWidth, imgHeight); // サイズを調整

  for (int y = 0; y < imgHeight; y += int(pixelSize)) {
    for (int x = 0; x < imgWidth; x += int(pixelSize)) {
      color c = resizedImg.get(x, y); // 元画像の色を取得
      fill(c);
      noStroke();
      rect(offsetX + x, offsetY + y, pixelSize, pixelSize); // ピクセル化して描画
    }
  }
  saveFrame("../" + sketchName + ".png");
}
ワタタク

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次