颜色的选择框是怎么做到2维的平面表示的颜色的三个值

发布于 2022-09-12 03:05:06 字数 180 浏览 52 评论 0

color.png
左上角是255,255,255, 右下角是0,0,0
这个是怎么计算的
还有下面的第一个拖动条拖动影响的是啥参数。
对颜色一知半解,求指导,因为想弄一个颜色选择卡的轮子(想自己实现)
求帮助!谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

月野兔 2022-09-19 03:05:06

QQ截图20200604164619.png

    let color = document.createElement('canvas') as HTMLCanvasElement;
    color.height = 100;
    color.width = 100;
    color.setAttribute('style', `
        border: 1px solid black; 
        width: 200px; 
        height: 200px; 
        display: block; 
        position: absolute;
        z-index: 10000;
        background-color: #ffffff;
        top: calc(50% - 100px);
        left: calc(50% - 100px);
    `);
    document.querySelector('body').appendChild(color);
    let ctx: CanvasRenderingContext2D = color.getContext('2d');
    let imageData = ctx.getImageData(0, 0, color.width, color.width);
    let referenceRgb = {r: 10, g: 255, b: 14}
    for(let i = 0; i < color.height; i++) {
        let per = i /  color.height;
        let t =  Math.floor(per * 255);
        let t1 = {r: 255 - t, g: 255 - t, b: 255 - t};
        let t2 = {
            r: Math.floor(referenceRgb.r - per * referenceRgb.r),
            g: Math.floor(referenceRgb.g - per * referenceRgb.g),
            b: Math.floor(referenceRgb.b - per * referenceRgb.b),
        }
        for(let j = 0; j < color.width; j++) {
            let p2 = j / color.width;
            let r = t1.r - (t1.r - t2.r) * p2;
            let g = t1.g - (t1.g - t2.g) * p2;
            let b = t1.b - (t1.b - t2.b) * p2;
            let index = (j + i * color.width) * 4;
            imageData.data[index + 0] = r;
            imageData.data[index + 1] = g;
            imageData.data[index + 2] = b;
            imageData.data[index + 3] = 255;
        }
    }
    ctx.putImageData(imageData, 0, 0);

已知滚动条得到左上角色值(r,g,b)
在左边从上到下去(255,255,255)->(0,0,0)乘以向下的比例(255~0)及得到(r1,g1,b1);
在右边边从上到下去(r,g,b)->(0,0,0)乘以向下的比例及得到(r2,g2,b2);
从左到右(r1,g1,b1)->(r2,g2,b2)比例就得到需要描绘的点的rgb值

悲喜皆因你 2022-09-19 03:05:06

RGBA分别表示红绿蓝和透明度

红绿蓝每个颜色的选值范围在0~255,这个值表示颜色的亮度,
0亮度最弱,255亮度最强,共有256种亮色级别。
透明度的选值在0~1,0是全透明。
所以每个颜色的计算由来是,rgb三种颜色混合而来。

如图所示
image.png
左上角是白色的,代表最亮,亮到曝光的三个255,最底层都是黑色,所以是三个0
图中彩色条是色彩值,黑灰条是透明度

美人如玉 2022-09-19 03:05:06

色彩空间 HSV / HSB / HSL 了解一下

箜明 2022-09-19 03:05:06

1.(0,0,0),(255,255,255),(r,g,b)三点决定一个平面;
2.(0,0,255) -> (0,255,255) -> (0,255,0) ... (0,0,255)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文