程晨旭博客

  • 首页
  • 知识
  • AnyLink
  • 资源
  • 案例
PLC程序设计 恒压供水程序
TEL:18037276890
  1. 首页
  2. 知识
  3. 正文

.NET C#生成随机颜色,基于YUV模式判断颜色明亮度,可以控制亮度,生成暗色或者亮色

2020-05-17 8点热度 0人点赞 0条评论

随机颜色在日常开发中很常用到,有时候要控制颜色明亮度,比如在白色背景网页上的随机颜色,一般要求颜色稍微暗一些,如果生成太亮的颜色会造成阅读困难,再比如你想判断生成的背景色是暗色还是亮色,以决定前景色是白色还是黑色.

采用YUV颜色模式来进行判断.YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。

RGB可以换算成YUV值,其中,我们只需要利用Y值即可,其他的暂时不用理会,换算公式如下:

Y = 0.299R + 0.587G + 0.114B

三点:1 Y值范围为0-255

2 Y值越大,颜色越亮

3  采用的是碰撞检测方法,先随机生成一个颜色,判断是否在指定的范围内,如果不在则重新生成,循环判断。所以指定范围的时候不能太小,否则可能产生几十甚至几百的循环次数,效率大大降低。可以以255的中间点设定边界范围,以产生较亮的或暗的颜色。

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        /// <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);
        }

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: C#
最后更新:2020-05-17

admin

PLC程序设计,TEL:18037276890

点赞
< 上一篇
下一篇 >

文章评论

取消回复

admin

PLC程序设计,TEL:18037276890

最新 热点 随机
最新 热点 随机
Sim_EKB_Install_2019_07_07 下载 博图授权工具免费下载地址 Toolbox_V32-STEP 7-Micro WIN 32 Instruction Library 免费下载地址 生产线多PID回路恒压供料系统 4G无线通讯 多级液位控制系统 西门子Smart200 潜水泵及变频恒压供水机组控制系统 西门子Smart200 人工造浪控制系统 西门子Smart200 一体化污水泵站程序及HMI程序 西门子恒压供水PLC程序 一对一 一拖多 Smart200程序 西门子S7-200 Smart 模拟量库文件 Scale下载 A/D模块模拟量模块单端输入和差分输入的区别
华控兴业气象百叶箱通过Anylink网关实现数据采集和远程监控信捷PLC XC3-24R-E 利用AnyLink网关实现远程监控 及Modbus地址转换工具A/D模块模拟量模块单端输入和差分输入的区别欧姆龙OMRON CJ1M CPU13-ETN 实现远程上下载程序及远程控制RS485中的波特率是什么意思?以及是如何影响传输距离的AnyLink IntelliEdge & IntelliEdgePro 系列数据采集网关 使用手册使用Anylink SE4G 采集恪成(kecheng)KP553A恒压供水控制器,实现远程控制。西门子S7-200 PLC红绿灯控制的一种写法 交通信号灯梯形图 附程序下载透传型DTU网关和边缘计算型DTU网关的区别欧姆龙CP1H系列PLC编程手册和操作手册PDF下载
博图V14 SP1下载 内含WinCC V14 Sp1 Professional/Step 7 V14 SP1 Professional/S7-PLCSIM V14 SP1 及安装教程 模拟量、数字量、开关量和脉冲量的区别以有各自使用场景 西门子S7-1500 PLC利用Anylink网关实现远程控制 CPU1513-1 PN A/D模块模拟量模块单端输入和差分输入的区别 AnyLink IE-M与PLC设备连接及设置方法 PLC程序设计中的常开和常闭开关触点的各种状态 Toolbox_V32-STEP 7-Micro WIN 32 Instruction Library 免费下载地址 AnyLink IntelliEdge & IntelliEdgePro 系列数据采集网关 使用手册 4G无线通讯 多级液位控制系统 昆仑通态触摸屏一个串口可以同时走PPI协议和Modbus
标签聚合
AnyLink 格兰富 信捷 DTU 西门子 PLC远程上下载程序 PLC 串口 网关 S7-200 RS232 RS485 边缘计算 ModBus PLC程序 梯形图 远程控制 远程上下载程序 S7-1200 二次供水
最近评论
发布于 1 周前(04月05日) Very good information. Lucky me I ran across your ...
发布于 1 周前(04月04日) Very good information. Lucky me I came across your...
发布于 1 周前(04月03日) of course like your website however you have to ta...
发布于 2 周前(03月27日) 多谢.倍感珍惜by https://www.jishurenyuan.com/tag/rengong...
发布于 3 周前(03月25日) 真心感谢.博主加油by https://www.gongxukemu.com/category/lu...
友情链接
AnyLink官网
AnyLink云平台
WordPress

COPYRIGHT © 2021 程晨旭博客. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

豫ICP备20012908号