.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模式判断颜色明亮度...相关推荐

  1. python生成随机个人信息——python批量生成随机信息

    实验:python批量生成随机信息 这个实验很简单,直接上代码了~~ 一.常用汉字的Unicode编码   在unicode码中,汉字的范围是(0x4e00,0x9fbf),但是其中包含了很多生僻字或 ...

  2. node 生成随机头像_唯一ID生成算法剖析

    引在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识:商品需要唯一标识:消息需要唯一标识:事件需要唯一标识-等等,都需要全局唯一ID,尤其是分布式场景下.唯一ID有哪些特性或者说要求呢 ...

  3. python生成随机的测验试卷_python生成随机的测验试卷文件

    假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验.不妙的是,班里有几个坏蛋,你无法确信学生不会作弊.你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能 ...

  4. python 基于pillow模块生成随机图片验证码教程

    效果图 我们先来看一下大致的效果图. 以上图形都是用非常基础的元素随机构成的:点,线,曲线,文本.而pillow模块远远不止这些功能,如果学好了它,真的就是你想怎么花就怎么花. 那么现在我们就去学习一 ...

  5. 大乐透python预测程序_Python生成随机验证码,大乐透号码

    随机生成验证码 示例代码: import random # 导入标准模块中的random if __name__ == '__main__': check_code = "" # ...

  6. 花书+吴恩达深度学习(二九)生成随机网络 GSN

    文章目录 0. 前言 1. 生成随机网络 GSN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深度学习(二七)深度生成模型之玻尔兹曼机及其变体(RBM, DB ...

  7. php随机生成昵称,使用PHP批量生成随机用户名

    使用PHP批量生成随机用户名 使用PHP批量生成随机用户名生成6 ~ 16位的用户名若干个,主要是文本操作,同事前提是要有一个字符串包,主要包含三个程序,都有哪些? 程序一:负责从字典中随机提取数据, ...

  8. 在 Linux 终端下生成随机/强密码的五种方法 | Linux 中国

    最近我们在网站上发表过一篇关于 检查密码复杂性/强度和评分的文章.它可以帮助你检查你的密码的强度和评分. 我们可以手工创建我们需要的密码.但如果你想要为多个用户或服务器生成密码,解决方案是什么呢? 是 ...

  9. Python 生成随机经纬度数据

    Python 生成随机经纬度 Description: python 自动生成经纬度, 该脚本适用于python3, 如果是python2请把# from __future__ import divi ...

最新文章

  1. 4、连接Mysql数据库
  2. onvif 客户端 linux,Linux下onvif客户端关于ipc摄像头的搜索
  3. 益生菌可能导致的“菌血症”与死亡(调研手稿六)
  4. Flash播放控件属性详解
  5. Ubuntu18.04上安装RTX 2080Ti显卡驱动
  6. 回家了,写博文继续!
  7. matlab更改矩阵的值,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  8. redis thinkphp mysql_Thinkphp5怎么扩展Redis数据库,实现Redis的CURD操作
  9. !!! SQL 数据库开发基础 传智!
  10. 算法:螺旋矩阵算出N行N列的数组Spiral Matrix II
  11. 串口和并口和网口区别
  12. windows 大容量存储设备驱动异常(代码:39)U盘由于驱动问题无法用的解决方法
  13. Ubuntu18.04下,QT5移植到ARM板上运行程序发生异常:could not find or load the Qt platform plugin linuxfb原因
  14. PR图文展示模板 母亲节父亲节活动创意幻灯片视频PR模板
  15. 蓦然回首,会员制CRM就在下里巴人处
  16. 阿里云IoT | HaaS开源百校科技助力计划 —— 开源大使招募
  17. 高级Android开发年薪35万,2019安卓继续冲起来!
  18. JWT实现单点登录(SSO)
  19. 【联邦学习+区块链】《联邦学习vs区块链:谁是“可信媒介”技术领域最强王者?》疑问解答
  20. 多线程下载文件实践之旅

热门文章

  1. ios10中禁止用户缩放页面
  2. 【转】如何在github上fork一个项目来贡献代码以及同步原作者的修改 -- 不错
  3. mongodb 备份和恢复
  4. python2 urllib 笔记
  5. 纯数学教程 Page 203 例XLI (1)
  6. javascript:面向对象编程基础:多态
  7. 补8.python之面相对象part.7(类相关函数的补充)
  8. Go编程基础 - 常量与运算符
  9. 关系型数据库之Mysql备份(五)
  10. Android谷歌地图服务开发注册流程及问题