RBG灯颜色渐变(颜色要尽可能多)程序分析
相信很多调过RBG灯的朋友都是通过分别改变R、B、G的占空比来改变颜色的,但是不是发现了一个问题,那就是不管怎样调都很难实现几十种颜色的变化,一般只有是7种颜色的渐变。下面给朋友们分享一个可以实现几十种颜色渐变(颜色确实比原来那方法多,能不能达到这么多应该跟有关)的方法,希望对大家有启示作用。
#include
using std::min;
using std::max;
void RGB2HSL(TColor AColor, double &H,double &S,double &L)
{
double R,G,B,Max,Min,del_R,del_G,del_B,del_Max;
R = GetRValue(AColor) / 255.0; //Where RGB values = 0 ÷ 255(得到R 的值)
G = GetGValue(AColor) / 255.0;//得到G的值
B = GetBValue(AColor) / 255.0;//得到B的值
Min = min(R, min(G, B)); //Min. value of RGB
Max = max(R, max(G, B)); //Max. value of RGB
del_Max = Max - Min; //Delta RGB value
L = (Max + Min) / 2.0;
if (del_Max == 0) //This is a gray, no chroma...
{
//H = 2.0/3.0; //Windows下S值为0时,H值始终为160(2/3*240)
H = 0; //HSL results = 0 ÷ 1
S = 0;
}
else //Chromatic data...
{
if (L < 0.5) S = del_Max / (Max + Min);
else S = del_Max / (2 - Max - Min);
del_R = (((Max - R) / 6.0) + (del_Max / 2.0)) / del_Max;
del_G = (((Max - G) / 6.0) + (del_Max / 2.0)) / del_Max;
del_B = (((Max - B) / 6.0) + (del_Max / 2.0)) / del_Max;
if (R == Max) H = del_B - del_G;
else if (G == Max) H = (1.0 / 3.0) + del_R - del_B;
else if (B == Max) H = (2.0 / 3.0) + del_G - del_R;
if (H < 0) H += 1;
if (H > 1) H -= 1;
}
}
HSL转换为RGB:
{
if (vH < 0) vH += 1;
if (vH > 1) vH -= 1;
if (6.0 * vH < 1) return v1 + (v2 - v1) * 6.0 * vH;
if (2.0 * vH < 1) return v2;
if (3.0 * vH < 2) return v1 + (v2 - v1) * ((2.0 / 3.0) - vH) * 6.0;
return (v1);
}
TColor HSL2RGB(double H,double S,double L)
{
double R,G,B;
double var_1, var_2;
if (S == 0) //HSL values = 0 ÷ 1
{
R = L * 255.0; //RGB results = 0 ÷ 255
G = L * 255.0;
B = L * 255.0;
}
else
{
if (L < 0.5) var_2 = L * (1 + S);
else var_2 = (L + S) - (S * L);
var_1 = 2.0 * L - var_2;
R = 255.0 * Hue2RGB(var_1, var_2, H + (1.0 / 3.0));
G = 255.0 * Hue2RGB(var_1, var_2, H);
B = 255.0 * Hue2RGB(var_1, var_2, H - (1.0 / 3.0));
}
return TColor(RGB(R,G,B));
}
//--------------------------------------------------------------------------
转载于:https://www.cnblogs.com/panlangen/p/7588415.html
RBG灯颜色渐变(颜色要尽可能多)程序分析相关推荐
- 一文搞懂Qt中的颜色渐变(QGradient Class)
一文搞懂Qt中的颜色渐变(QGradient Class) 1, 快速开始! Qt中与颜色渐变有关的类是QGradient 其中它又有三个子类:QLinearGradient.QRadialGradi ...
- CSS渐变颜色和浏览器前缀、opacity透明度以及设置多个背景图片写法
目录 前言 一.多个背景图片 二.渐变颜色 1.线性渐变 2.径向渐变 3.浏览器前缀 4.opacity透明度 写在最后 前言 在前面说了CSS怎样设置背景图片,与设置颜色的几种方式.如果你想查看可 ...
- CSS背景属性之颜色渐变
颜色渐变 颜色渐变其实在网页设计中并不是特别常见,但也不可避免的会出现导航栏是渐变色这种情况或者别的不是单一颜色的情况,例如: 这样的设计解决方案并不是只可以使用颜色渐变,我们可以使用两个div拼接, ...
- CSS 文字,边框实现从左至右颜色渐变
微信小程序开发交流qq群 173683895 承接微信小程序开发.扫码加微信. 1.文本从左至右颜色渐变 效果图: 2.边框从左至右颜色渐变 效果图: 实现代码: 1.文本从左至右颜色渐变实 ...
- 【原】Github系列之三:开源iOS下 渐变颜色的进度条WGradientProgress
概述 今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有"B格".它拥有渐变的颜色, ...
- matlab 多条函数颜色渐变(没多大用处)
多条函数颜色渐变(没多大用处) clc,clear; data=sin(linspace(0,2*pi,100)); for i=1:7plot((7-i)*data,'color',[0 1 0]* ...
- ARabevaluator 颜色渐变控制类
参考资料: http://blog.csdn.net/qq_33456552/article/details/52092865 实现渐变效果: ArgbEvaluator argbEvaluator; ...
- CSS3颜色渐变模式
1.线性渐变:linear-gradient 语法:<linear-gradient> = linear-gradient([ [ <angle> | to <si ...
- php如何在添加div的背景颜色_css3颜色渐变:css3如何实现背景颜色渐变?
为了开发网页的美观,css3背景颜色渐变是经常会用到的,那么,css3背景颜色渐变如何设置呢?本篇文章我们就来介绍关于css颜色渐变背景的设置方法. 我们要知道的是css3渐变有两种类型:css3线性 ...
最新文章
- 使用ubuntu(18.04) 作为软路由器连接互联网
- jQuery 元素操作——遍历元素
- 持续交付二:为什么需要多个环境
- SendMessage和PostMessage
- Eclipse 答疑:如何使用 Eclipse 进行断点(Breakpoints)调试?
- 别在我的坟前哭 脏了我轮回的路
- Extjs6(六)——增删查改之查询
- php初学遇到的问题。
- 卡诺模型案例分析_质量管理神器,Kano模型您可知道?
- 仿百度文库解决方案(一)——总体思路
- 安装firefox扩展(xpi)文件的简便方法
- 给宝宝的固态硬盘装机教程
- 曼联足球俱乐部披露安全漏洞
- Axure Share ——原型设计工具 Axure ,移动版
- 找出大于200的最小质数
- 图画日记怎么画_画画提高的一个方法: 绘画日记!
- C#实例.net_经典例子400个
- GDB attach 调试
- android 水波纹扩散动画,[Android]多层波纹扩散动画——自定义View绘制
- [wine5.0] 解决wine所有软件乱码(中文不显示)问题