Color Generator
グラデーションな色を抽出したいときに使うアプリのようなものです。
タイルの色はスライドバーのhue(色相)・saturation(彩度)・Brightness(明度)で調整できます。
タイルを幾つに分割するのかは、gridスライドバーで調整をします。
またHSBスライドーバーのそれぞれには3つのスライドバーを持ちます。
上から1番目と2番目のスライドバーはタイルの色の範囲を表します。この色の範囲を指定することにより、グリッドの左から右(または上から下)のタイルに段階的な色の変化をつけることができます。
hue(色相)は左から右へ、saturation(彩度)・Brightness(明度)は上から下へ色が変化します。
1番下のスライドバーは1番目と2番目のスライドバーの値を一致させるものです。単色のグラデーションが欲しい時などにお使いください。
		var resolution;
		var grid;
		var blank;
		const guiSize = 150;
		var colorBox = [];
		var colorInfo = [];
		var hueVal, satVal, briVal;
		var hue, saturation, brightness;
		var maxWidth;
		var resolutionW;


		function setup() {
		  if(windowWidth < windowHeight) {
		    maxWidth = windowWidth;
		    resolutionW = maxWidth-guiSize;
		  } else {
		    maxWidth = windowHeight;
		    resolutionW = maxWidth*0.8-guiSize;
		  }
		  createCanvas(maxWidth, windowHeight);
		  colorMode(HSB);
		  rectMode(CENTER);
		  createGUI();
		  noStroke();
		}

		function draw() {
		  background(0);
		  translate(resolution/2, resolution/2 + height*0.1);
		  grid = s_grid.value();
		  resolution = (resolutionW)/grid;
		  blank = resolution * 0.1;

		  if(hueVal != s_hue.value()) {
		    s_hue_max.value(s_hue.value());
		    s_hue_min.value(s_hue.value());
		  }
		  if(satVal != s_sat.value()) {
		    s_sat_max.value(s_sat.value());
		    s_sat_min.value(s_sat.value());
		  }
		  if(briVal != s_bri.value()) {
		    s_bri_max.value(s_bri.value());
		    s_bri_min.value(s_bri.value());
		  }

		  hueVal = s_hue.value();
		  satVal = s_sat.value();
		  briVal = s_bri.value();

		  for(var y = 0; y < grid; y++) {
		    for(var x = 0; x < grid; x++) {
		      hue = map(x, 0, grid-1, s_hue_min.value(), s_hue_max.value());
		      saturation = map(y, 0, grid-1, s_sat_min.value(), s_sat_max.value());
		      brigthness = map(y, 0, (grid-1),  s_bri_min.value(),  s_bri_max.value());
		      fill(hue, saturation, brigthness, 255);
		      rect(x*resolution, y*resolution, resolution-blank, resolution-blank);
		    }
		  }
		}

		function inBox(mx, my) {
		  my = my-height*0.1;
		  var hitBox = false;
		  for(var y = 0; y < grid; y++) {
		    for(var x = 0; x < grid; x++) {
		      if(x*resolution+blank/2 < mx && (x+1)*resolution-blank/2 > mx &&
		      y*resolution+blank/2 < my && (y+1)*resolution-blank/2 > my) {
		        hitBox = true;
		        break;
		      }
		    }
		  }
		  return hitBox;
		}

		function mousePressed() {
		  if(inBox(mouseX, mouseY)) {
		    var col = get(mouseX, mouseY);

		    var r = parseInt(col[0]).toString(16);
		    var g = parseInt(col[1]).toString(16);
		    var b = parseInt(col[2]).toString(16);

		    if(r.length == 1) r = "0"+r;
		    if(g.length == 1) g = "0"+g;
		    if(b.length == 1) b = "0"+b;


		    var hex = "#"+r+g+b;
		    var id = colorBox.length;

		    colorBox.push(createP(' '))
		    colorBox[id].parent("wrapper")
		    colorBox[id].style("color","rgb(255,255,255)")
		    colorBox[id].style("background",hex)
		    colorBox[id].style("width",20+"px")
		    colorBox[id].style("height",20+"px")


		    colorInfo.push(createP(hex))
		    colorInfo[id].parent("wrapper")
		    colorInfo[id].style("color","rgb(255,255,255)")
		    colorInfo[id].style("background","transparent")


		    for(var i = 0; i < id+1; i++) {
		      colorBox[i].position(0, (id-i)*30)
		      colorInfo[i].position(30, (id-i)*30)
		    }
		  }
		}

		function reset() {
		  var len = colorBox.length;
		  if(len > 0) {
		    for(var i = 0; i < len; i++) {
		      colorBox[i].remove();
		      colorInfo[i].remove();
		    }
		    colorBox.splice(0, len);

		    colorInfo.splice(0, len);
		    console.log(colorBox);
		  }
		}

		function createGUI() {
		  var scal = 0.9;
		  var pY = windowHeight*scal - guiSize ;
		  var sliderY1 = pY + 45;
		  var sliderY2 = sliderY1 + 30;
		  var sliderY3 = sliderY1 + 60;
		  var stepX = (width/4)*scal;
		  var sw = stepX*scal;
		  var blankLeft = (width/4)*(1-scal);


		  var colorInfoWrapper = createDiv("");
		  colorInfoWrapper.id("wrapper");
		  colorInfoWrapper.position(width-guiSize + 30, height*0.1);
		  colorInfoWrapper.style("background", "#000");
		  colorInfoWrapper.style("width", (guiSize-30)+"px");
		  colorInfoWrapper.style("height", (height*0.8-guiSize)+"px");
		  colorInfoWrapper.style("overflow-y", "auto");



		  b_reset = createButton("Reset");
		  b_reset.mousePressed(reset);
		  b_reset.style("width", "100px");
		  b_reset.style("height", "30px");
		  b_reset.style("background", "#000");
		  b_reset.style("color", "#fff");
		  b_reset.style("border", "solid 3px #fff");
		  b_reset.position(width-b_reset.width, (height*scal))

		  s_hue = createSlider(0, 360, 30);
		  s_hue.position(blankLeft, sliderY3)
		  s_hue.size(sw,AUTO)

		  s_hue_min = createSlider(0, 360, 20);
		  s_hue_min.position(blankLeft, sliderY1)
		  s_hue_min.size(sw,AUTO)

		  s_hue_max = createSlider(0, 360, 60);
		  s_hue_max.position(blankLeft, sliderY2)
		  s_hue_max.size(sw,AUTO)

		  l_hue = createP('hue ')
		  l_hue.style("color","rgb(255,255,255)")
		  l_hue.position(blankLeft, pY)

		  s_sat = createSlider(0, 100, 85);
		  s_sat.position(blankLeft + stepX, sliderY3)
		  s_sat.size(sw,AUTO)

		  s_sat_min = createSlider(0, 100, 30);
		  s_sat_min.position(blankLeft + stepX, sliderY1)
		  s_sat_min.size(sw,AUTO)

		  s_sat_max = createSlider(0, 100, 85);
		  s_sat_max.position(blankLeft + stepX, sliderY2)
		  s_sat_max.size(sw,AUTO)

		  l_sat = createP('saturation ')
		  l_sat.style("color","rgb(255,255,255)")
		  l_sat.position(blankLeft + stepX, pY)

		  s_bri = createSlider(0, 100, 95);
		  s_bri.position(blankLeft + stepX*2, sliderY3)
		  s_bri.size(sw,AUTO)

		  s_bri_min = createSlider(0, 100, 95);
		  s_bri_min.position(blankLeft + stepX*2, sliderY1)
		  s_bri_min.size(sw,AUTO)

		  s_bri_max = createSlider(0, 100, 85);
		  s_bri_max.position(blankLeft + stepX*2, sliderY2)
		  s_bri_max.size(sw,AUTO)

		  l_bri = createP('brightness ')
		  l_bri.style("color","rgb(255,255,255)")
		  l_bri.position(blankLeft + stepX*2, pY)

		  s_grid = createSlider(1, 20, 4);
		  s_grid.position(blankLeft + stepX*3, sliderY1)
		  s_grid.size(sw,AUTO)
		  l_grid = createP('grid ')
		  l_grid.style("color","rgb(255,255,255)")
		  l_grid.position(blankLeft + stepX*3, pY)

			if(windowWidth < 640) {
				allP = selectAll("p");
				for(var i = 0; i < allP.length; i++) {
					allP[i].style("font-size", "12px");
		          	allP[i].style("text-transform", "capitalize")
				}
			}

		  hueVal = s_hue.value();
		  satVal = s_sat.value();
		  briVal = s_bri.value();
		}