计算机对颜色的表示,有很多种方式。如RGB模式、HSB(HSV)模式、CMYK模式等。这里重点讲如何用C#语言,生成一个RGB模式的调色盘。

先看效果图:

在计算机中,一个像素点的颜色,由三种颜色构成:红色(R),蓝色(B)和绿色(G)构成。每种颜色的最大值为255,最亮,最小值为0,最暗。因此,构建一张这样的图片,重点就在于三种颜色如何进行混合。

因为有三种颜色,首先很容易想到,将一个圆,三等份,每一份表示一种颜色,其颜色值为255,这就构成了基本的调试盘。例如在-60°~60°这个区间内,所有像素的颜色值,R = 255, G =0, B =0。如下图所示:

有了这一个调色盘之后,就需要将各种颜色,向相邻的区域进行扩散。如何扩散,是调色盘绘制的关键。

颜色的扩散,有两个方向:

  1. 圆周扩散:从一个颜色的边缘,沿着圆周向相邻区域扩散;
  2. 径向扩散:从圆的中心点,向圆周扩散。

那么扩散的范围呢?通常的做法如下:

  1. 圆周的扩散范围是60°。例如红色,在60°~120°、-120°~-60°的区间内,圆周上各像素点的R值,从255按比例减少至0。在120°~180°、-180°~-120°区间内,圆周上各像素点的R值,均为0;
  2. 径向扩散的范围是120度。例如红色,在60°~180°、-180°~-60°的区间内,沿着半径的方向,各像素点的R值,从255按比例减少至圆周像素点的R值。

如下图所示:

有了这两条规则,就可以计算出每一个点的颜色值。

核心代码如下:

public Color GetColor(int x, int y,int radius)
{// radius为圆的半径// 已圆心为坐标原点,水平向右为起始向量Vector o = new Vector(radius, 0);// r,g,b为三个原色分量byte r, g, b;// 点(x,y)到圆心的距离double distance = Math.Sqrt(Math.Pow(x - radius, 2) + Math.Pow(y - radius, 2));// 距离大于半径,说明点在圆的外面,不用计算器颜色if (distance > radius) return new Color() { A = 0 }// 将(x,y)换算成已圆心为坐标原点的坐标,并计算向量(x1,y1)与起始向量的夹角Vector v1 = new Vector(x - radius, radius - y);double angel = Vector.AngleBetween(o, v1);if (angel <= -60){// 落在蓝色区间r = CalculateSpread(distance, -angel - 60);g = CalculateSpread(distance, 180 + angel);b = 255;}else if (angel <= 60){// 落在红色区间r = 255;g = CalculateSpread(distance, 60 - angel);b = CalculateSpread(distance, 60 + angel);}else{// 落在绿色区间r = CalculateSpread(distance, angel - 60);g = 255;b = CalculateSpread(distance, 180 - angel);}return new Color() { R = r, G = g, B = b, A = 255 };
}// 计算某个颜色的分量。
// distance为点到圆心的距离;
// angel为点与圆心的连线,与颜色的边界之间的夹角
private byte CalculateSpread1(double distance, double angel, int radius)
{// 计算圆周分量:如果两个向量的夹角大于60度,则圆周分量为0;否则,计算比例递减double circum = angel > 60 ? 0 : circum = 255 - (angel / 60 * 255);return (byte)(255 - distance / radius * (255 - circum));
}

关于控件的制作,下回讲解

WPF调色盘(1):绘制三色轮相关推荐

  1. WPF调色盘(2):显示调色盘

    上一篇文章写到如何绘制一个调色盘,并给出了核心算法代码.但还缺少一个步骤:显示该调色盘. 既然已经可以绘制一个调色盘了,那就必然要将调盘显示出来!如何显示呢?这就需要用到一个"可写的图片&q ...

  2. matlab绘制hsv色轮图

    % 生成网格 tList=linspace(0,2.*pi,300); rList=linspace(0,1,100); [theta,R]=meshgrid(tList,rList);% 角度及半径 ...

  3. rgb三色直方图的绘制

    三色和单色是一致的:程序的写法在下一个CSDN 不仅仅是RGB还有HSV图像都会有比较重要的画法:色调,饱和度,亮度 绘制三色直方图还是三种向量的直方图都会有意义: 1.参数准备: int bins= ...

  4. 第16章 调色盘管理器

    如果硬件允许,本章就没有存在的必要.尽管许多现代的显示卡提供24位颜色(也称「true color」或「数百万色」)或16位颜色(「增强色」或「数万种颜色」),一些显示卡-尤其是在便携式计算机上或高分 ...

  5. Adobe Premiere-调色之[创意面板,色轮和匹配,多个Lumetri](三)

    创意面板 创意面板的预设可以运用的任何视频上,比如VLOG.特效短片都可以使用预设来完成调色. 注意事项: 使用创意面板预设前, 首先要在基本校正面板里进行一级调色保证原始画面没有问题.不然预设效果会 ...

  6. 《超越平凡的平面设计: 版式设计原理与应用》—色轮

    本节书摘来自异步社区<超越平凡的平面设计: 版式设计原理与应用>一书中的色轮,作者[美]John McWade,更多章节内容可以访问云栖社区"异步社区"公众号查看. 色 ...

  7. python画图怎么调色_Python气象数据处理与绘图(19):如何使用NCL色板(调色盘思路相同)...

    一. 使用NCL色板(使用调色盘文件思路相同) NCL的色板十分丰富,几乎可以涵盖平常所需.详见:传送门 那么我们能否将NCL的色板用在python中呢?答案当然是可以的. 我在气象家园发现了个帖子, ...

  8. 最好用的分组数据可视化工具--Seaborn调色盘

    上一篇文章写了Seaborn基本风格设置,这一篇文章写一下Seaborn中的调色盘设置 首先引入所需模块 import numpy as np import pandas as pd import m ...

  9. 原生JS搭配canvas模式开发的调色盘

    之前做了一版纯div版的,有同学反应加载速度太慢.无可否认,1W多个div能不慢么.做那个版本的用意在于...好玩, 好了,同样废话不多说,这次先上图吧! 风格是学习的谷歌的,一眼就看得出来,由于IE ...

  10. DaVinci:色轮

    调色页面:色轮 Color:Color Wheels 色轮 Color Wheels调板又称"一级调板" Primaries Palette,用来进行最传统最基础的整体色彩校正,包 ...

最新文章

  1. Atitit. Attilax企业框架 AEF的发展里程总结
  2. VC对话框最小化到托盘
  3. Java入门第三季——Java中的集合框架(中):MapHashMap
  4. Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)
  5. 不要低估AI面临的困境
  6. 星空背景JavaScript代码
  7. mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)
  8. 计算机科学 高中研究项目,高中信息科技教学中渗透计算机科学史的实践研究...
  9. 诊断Oracle 服从成绩
  10. 屏蔽爬虫之robots.txt
  11. 安装企业微信和微信-ubuntu
  12. Android开机执行指定shell脚本
  13. x86 和 x64 到底是什么意思?
  14. python脚本1 - PPT导出为图片(WinLinux)
  15. 2021WSB-day3-1 - Arun Ross 老师讲解Privacy Preserving Biometrics
  16. InDesign 教程如何制作明信片?
  17. 异地多活架构的3种模式
  18. node mocha_使用Mocha和Chai测试Node RESTful API
  19. 序列化Serializable、Parcelable
  20. 提升工作效率的神器:电脑版番茄工作软件

热门文章

  1. 嗖嗖移动大厅之使用场景类
  2. 利用FME创建CAD标准图层模板
  3. [电影]《指环王》新老三部曲完全赏析(魔戒再现)
  4. 系统逻辑架构图怎么画
  5. 圣水观音湖规划--------------三维虚拟展示系统
  6. 我的毕业旅行--Four night in beijing
  7. oracle 统计每天新增订单数量
  8. 低代码快速对接淘宝订单数据(超详细教程)
  9. 计算机插座符号,插座符号大全
  10. UWP: 通过命令行启动 UWP 应用