gpt4 book ai didi

javascript - 生成具有完整 rgb 空间的 Canvas 颜色选择器

转载 作者:行者123 更新时间:2023-11-30 12:51:06 26 4
gpt4 key购买 nike

由于 RGB 需要一个立方体来显示所有颜色,因此有更多方法可以显示所有颜色。我想要一个圆圈以全彩显示彩虹中的所有颜色 - 当单击时在它自己的小 2D 空间中显示所选颜色的所有不同亮度。

我想使用 Canvas 生成类似于此图像的内容:

Color picker

我的尝试:

Javascript:

function ColorPicker(element) {
this.element = element;

this.init = function() {
var diameter = this.element.offsetWidth;

var canvas = document.createElement('canvas');
canvas.height = diameter;
canvas.width = diameter,
this.canvas = canvas;

this.renderColorMap();

element.appendChild(canvas);

this.setupBindings();
};

this.renderColorMap = function() {
var canvas = this.canvas;
var ctx = canvas.getContext('2d');

var radius = canvas.width / 2;
var toRad = (2 * Math.PI) / 360;
var step = 1 / radius;

ctx.clearRect(0, 0, canvas.width, canvas.height);

for(var i = 0; i < 360; i += step) {
var rad = i * toRad;
ctx.strokeStyle = 'hsl(' + i + ', 100%, 50%)';
ctx.beginPath();
ctx.moveTo(radius, radius);
ctx.lineTo(radius + radius * Math.cos(rad), radius + radius * Math.sin(rad));
ctx.stroke();
}

ctx.fillStyle = 'rgb(255, 255, 255)';
ctx.beginPath();
ctx.arc(radius, radius, radius * 0.8, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();

// render the rainbow box here ----------
};

this.renderMouseCircle = function(x, y) {
var canvas = this.canvas;
var ctx = canvas.getContext('2d');

ctx.strokeStyle = 'rgb(255, 255, 255)';
ctx.lineWidth = '2';
ctx.beginPath();
ctx.arc(x, y, 10, 0, Math.PI * 2, true);
ctx.closePath();
ctx.stroke();
};

this.setupBindings = function() {
var canvas = this.canvas;
var ctx = canvas.getContext('2d');
var self = this;

canvas.addEventListener('click', function(e) {
var x = e.offsetX || e.clientX - this.offsetLeft;
var y = e.offsetY || e.clientY - this.offsetTop;

var imgData = ctx.getImageData(x, y, 1, 1).data;
var selectedColor = new Color(imgData[0], imgData[1], imgData[2]);
// generate this square here.

self.renderMouseCircle(x, y);
}, false);
};

this.init();
}

new ColorPicker(document.querySelector('.color-space'));

JSFiddle:http://jsfiddle.net/yH6JE/

我很难弄清楚如何在中间生成这个正方形。基本上,我希望最左边中间的颜色与戒指上的颜色相同 - 我通过单击选择的颜色。

如何生成这种渐变方 block ?

最佳答案

看起来你想要一个 HSL 颜色矩形,色调是从色轮中选择的。

这是我用来绘制矩形的函数:

function draw(canvas, hue){
var ctx = canvas.getContext('2d');
for(row=0; row<100; row++){
var grad = ctx.createLinearGradient(0, 0, 100,0);
grad.addColorStop(0, 'hsl('+hue+', 100%, '+(100-row)+'%)');
grad.addColorStop(1, 'hsl('+hue+', 0%, '+(100-row)+'%)');
ctx.fillStyle=grad;
ctx.fillRect(0, row, 100, 1);
}
}

希望它能如您所愿。此处示例:colour rect js fiddle

关于javascript - 生成具有完整 rgb 空间的 Canvas 颜色选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20935299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com