.NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度
.NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度
随机颜色在日常开发中很常用到,有时候要控制颜色明亮度,比如在白色背景网页上的随机颜色,一般要求颜色稍微暗一些,如果生成太亮的颜色会造成阅读困难,再比如你想判断生成的背景色是暗色还是亮色,以决定前景色是白色还是黑色.
采用YUV颜色模式来进行判断会比较合理与直观.
YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。
以上红色部分解释了这个方法的合理性与准确性,具体的信息可以搜索YUV来进行更进一步的了解,RGB可以换算成YUV值,其中,我们只需要利用Y值即可,其他的暂时不用理会,换算公式如下:
Y = 0.299R + 0.587G + 0.114B
两点:1 Y值范围为0-255
2 Y值越大,颜色越亮
核心代码部分:

/// <summary>
/// 根据自定义范围生成颜色
/// </summary>
/// <param name="start">起始数值 0-255</param>
/// <param name="end">结束数值 0-255</param>
/// <returns>Color</returns>
private static Color MarkColor(int start,int end)
{
if (start < 0 || start > 255) throw new Exception("起始数值只能为0-255之间的数字");
if (end < 0 || end > 255) throw new Exception("结束数值只能为0-255之间的数字");
if (start > end) throw new Exception("起始数值不能大于结束数值");
Random ran = new Random(Guid.NewGuid().GetHashCode());
int R, G, B;
double Y;
bool result;
do
{
R = ran.Next(0, 255);
G = ran.Next(0, 255);
B = ran.Next(0, 255);
//Y值计算公式
Y = 0.299 * R + 0.587 * G + 0.114 * B;
result = Y >= start && Y <= end;
} while (!result);
return Color.FromArgb(R, G, B);
}

为了使用更加方便,我把方法封装成了一个类库,提供了以下几个静态方法:
public static Color MakeDarkColor(int borderline = 180); //获取暗色 默认小于180 public static Color MakeLightColor(int borderline = 180); //获取亮色 默认大于180 public static Color MakeAllColor(); //获取所有颜色 public static Color MakeColorByDefine(int start, int end); //根据范围获取颜色 public static int GetY(Color color); //获取颜色Y值
使用时只需要引用命名空间即可使用MarkRandomColor类的以上静态方法
using ChengChenXu.com.MakeRandomColor;
使用示例:
Color color = MakeRandomColor.MarkLightColor(); Color color = MakeRandomColor.MarkDarkColor(150); Color color = MakeRandomColor.MarkAllColor();
最后,文件下载:
类库:
ChengChenXu.com.MakeRandomColor.rar
源码与示例:
demo.rar
本文为博主原创,转载请保留出处:
http://www.chengchenxu.com/Article/16/yuv
.NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度的更多相关文章
- C#生成随机验证码
使用YZMHelper帮助类即可 using System; using System.Web; using System.Drawing; using System.Security.Cryptog ...
- PHP 生成随机字符串与唯一字符串
说明:生成随机字符串用到的方法有 mt_rand() 生成唯一字符串用到的方法有 md5(),uniqid(),microtime() 代码: <?php /* * 生成随机字符串 * @par ...
- php生成随机产生六位数密码的代码
php生成随机产生六位数密码的代码,供大家学习参考.本文转自:http://www.jbxue.com/article/6199.html php生成随机产生六位数密码的代码,供大家学习参考. 复制代 ...
- PHP生成随机字符串与唯一字符串
代码如下: <?php /* * 生成随机字符串 * @param int $length 生成随机字符串的长度 * @param string $char 组成随机字符串的字符串 * @ret ...
- 采用HSV生成随机颜色
使用hsv/hsb生成随机颜色,并排除靠近黑白两色的色值 public static String randomColor(){ int max = 25500000 ; Random rand = ...
- PHP生成随机水印图片
基于PHP的GD图形库,自己生成一张图片.仅限初识GD库,实例学习. 一.需求 网站的布局用到了类似慕课网课程列表的风格,每一个课程是一个banner图,图下面是标题加简介.因为课程的数量较大没有为所 ...
- Color.js增强你对颜色的控制
往逝之因 不要低头,皇冠会掉... 可你又没有皇冠 Color.js 增强你对颜色的控制 阅读目录 轻松管理颜色--color.js库 使用color.js Accessor Methods 你该知 ...
- Python Faker的使用(1):基础使用方法与函数速查,生成随机数据
在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据. 在手动制造数据的过程中,可能需要花费大量精力和工作量,现在好了,有一 ...
- Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本<Unity Shader入门精要>,<Unity 3D ShaderLa ...
随机推荐
- ALICTF2014 EvilAPK4脱壳分析
相关文件可以在下面链接中下载: http://pan.baidu.com/s/1sjpvFy9 1 简述 该apk使用libmobisec.so函数实现对dex的解密还原.真正的dex为assets目 ...
- 美食节(bzoj 2879)
Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...
- PAT 天梯赛 L1-043 阅览室
L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者 ...
- linux之awk手册
awk 手册 原文 Table of Contents 1. awk简介 2. awk命令格式和选项 2.1. awk的语法有两种形式 2.2. 命令选项 3. 模式和操作 3.1. 模式 3.2 ...
- Educational Codeforces Round 37 A B C D E F
A. water the garden Code #include <bits/stdc++.h> #define maxn 210 using namespace std; typede ...
- docker下使用DB2
1.查询可安装的db2镜像 benjamin@docker:~$ docker images |grep -i db2 ibmcom/db2express-c latest 7aa154d9b73c ...
- 安卓edittext实现输入数字限制条件的效果
我们知道edittext能指定输入字符类型,这次我们就来了解下在数字模式下的一些显示控制输入的效果 1.限制输入数字 android:inputType="number|numberDeci ...
- python 设计模式之命令模式
命令模式介绍: 在面向对象编程中,命令模式是概括所有方法信息的设计模式. 此模式对象包涵方法名,及其相关参数值. 命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵 ...
- Zend Studio 9.0.2破解文件和注册码下载
Zend Studio是Zend Technologies开发的PHP语言集成开发环境(IDE),是公认最好的PHP开发工具.当前Zend Studio最新版本是9.0.2. Zend Studio ...
- poj 3648 线段树成段更新
线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...