キー | 画像(全体) | 画像(左上) | 意味 | 特徴 |
---|---|---|---|---|
0 | 元.jpg | 元.png | 元画像と色立体の明度70の断面の円 | |
1 | 色相+120.jpg | 色相+120.png | 色空間で時計回りに120°回転させた画像 |
黄はシアン, シアンはマゼンタ, マゼンタは黄に 赤は緑, 緑は青, 青は赤に変わる |
2 | 色相+240.jpg | 色相+240.png | 色空間で時計回りに240°回転させた画像 |
黄はマゼンタ, マゼンタはシアン, シアンは黄に 赤は青, 青は緑, 緑は赤に変わる |
3 | 彩度+30.jpg | 彩度+30.png | 彩度を30上げた画像 | 色が鮮やかになる |
4 | 彩度-30.jpg | 彩度-30.png | 彩度を30下げた画像 | 色が褪せる |
5 | 明度+30.jpg | 明度+30.png | 明度を30上げた画像 | 明るくなる |
6 | 明度-30.jpg | 明度-30.png | 明度を30下げた画像 | 暗くなる |
// 画像用の変数 PImage[][] img = new PImage[7][2]; // 出力ファイル名 String[] fName = {"元", "色相+120", "色相+240", "彩度+30", "彩度-30", "明度+30", "明度-30"}; void setup() { size(800, 600); img[0][0] = loadImage("元.jpg"); img[0][0].resize(width, height); textFont(createFont("MS Pゴシック", 48)); background(0); image(img[0][0], 0, 0); createColorCircle(); // 元画像、色円の色相を120増やした画像をimg[1][0], img[1][1]に保存 // 元画像、色円の色相を240増やした画像をimg[2][0], img[2][1]に保存 // 元画像、色円の彩度を30上げた画像をimg[3][0], img[3][1]に保存 // 元画像、色円の彩度を30下げた画像をimg[4][0], img[4][1]に保存 // 元画像、色円の明度を30上げた画像をimg[5][0], img[5][1]に保存 // 元画像、色円の明度を30下げた画像をimg[6][0], img[6][1]に保存 println("完了"); } void draw() { } // 基本の色円を作る void createColorCircle() { img[0][1] = createImage(200, 200, ARGB); // 200x200の透明画像 colorMode(HSB, 360, 100, 100); // 色指定モードをHSBにする int r = img[0][1].width/2; for (int j=0; j<r*2; j++) { for (int i=0; i<r*2; i++) { // 円の中心から(i, j)までの距離をfloat dに入れる // (i, j)が(r, r)を中心とする半径rの円の中なら // 円の中心と(i, j)を結ぶ線の傾き(-PI~PI)をfloat aに入れる // aが0以上になるように修正 // 画像[0][1]の(i, j)の色を色相a(度に直した値), 中心からの距離に比例した彩度, 明度70の色にする } } img[0][1].save("data/" + fName[0] + ".png"); } // 元画像を画像[n][0], 色円画像を画像[n][1]にコピーして色相をa度回転させ、彩度をb上げ、明度をc上げる void changeHSB(int n, float a, float b, float c) { // 元画像(k=0),色円画像(k=1)の両方について処理を行う for (int k=0; k<2; k++) { img[n][k] = img[0][k].get(); // 元画像, 色円画像をn番にコピー int w = img[n][k].width; int h = img[n][k].height; for (int j=0; j<h; j++) { for (int i=0; i<w; i++) { color cl = img[n][k].pixels[i+j*w]; // (i, j)のピクセルの色 // そのピクセルが透明なら処理をスキップ if (alpha(cl) == 0) { continue; } // 色相, 彩度, 明度を取得 float H = hue(cl); float S = saturation(cl); float B = brightness(cl); // 360以上にならないように色相をa増やす // 彩度をb上げる // 明度をc上げる img[n][k].pixels[i+j*w] = color(H, S, B); } } } img[n][0].save("data/" + fName[n] + ".jpg"); img[n][1].save("data/" + fName[n] + ".png"); } void keyPressed() { int k = key-'0'; if (k>=0 && k<=6) { colorMode(RGB, 255, 255, 255); // 色指定モードをRGBにする background(0); image(img[k][0], 0, 0); image(img[k][1], 0, 0); fill(255, 0, 0); text(fName[k], 30, height-30); fill(255); } }
// 元画像、色円の色相を120増やした画像をimg[1][0], img[1][1]に保存 // 元画像、色円の色相を240増やした画像をimg[2][0], img[2][1]に保存
// 元画像、色円の彩度を30上げた画像をimg[3][0], img[3][1]に保存 // 元画像、色円の彩度を30下げた画像をimg[4][0], img[4][1]に保存 // 元画像、色円の明度を30上げた画像をimg[5][0], img[5][1]に保存 // 元画像、色円の明度を30下げた画像をimg[6][0], img[6][1]に保存