红色:FF0000 绿色:00FF00
如何实现红色到绿色的渐变?如果简单的只改变R和G的值的话,会发现比真正的渐变效果少了中间的黄色(真正的红色到绿色的渐变过程是:红色->浅黄色->绿色)。
哪个大哥知道这中间应该如何改变啊?
有现成的算法更好,最好能给出例子,在线等
如何实现红色到绿色的渐变?如果简单的只改变R和G的值的话,会发现比真正的渐变效果少了中间的黄色(真正的红色到绿色的渐变过程是:红色->浅黄色->绿色)。
哪个大哥知道这中间应该如何改变啊?
有现成的算法更好,最好能给出例子,在线等
解决方案 »
- listctrl选中行的颜色
- 给定两个IP 查找最合适的中间IP作为服务节点
- 多线程发送数据,如何控制各个线程的发送速率?各线程的发送速率不同。
- 请教:ATL生成的嵌入IE的activex控件,在IE关闭时为什么没有调用控件的析构函数?
- ···100分!求一份类似acdsee界面风格的代码框架,不胜感激,谢谢!!
- [困惑]我是一个小小VB的程序员,请不要鄙视我,各位VC的大虾们,我现在想问一些关于VC的DLL的问题!
- 在VB中只要给一个控件设置了ToolTipText就可以在鼠标悬停于控件上方的时候显示一行提示文字,我要在SDK中实现该怎么办啊?
- 如何修改map中的数据
- 关于获取其它程序的控件内容的问题。谢谢
- API 函数截获之困惑
- fatal error C1083: Cannot open type library file: 'msxml4.dll': No such file or directory
- DLL中的定时器(无窗口句柄定时器)控制和动态变化
{
int r = (GetRValue(endColor) - GetRValue(startColor));
int g = (GetGValue(endColor) - GetGValue(startColor));
int b = (GetBValue(endColor) - GetBValue(startColor)); int nSteps = max(abs(r), max(abs(g), abs(b)));
if (nSteps < 1) nSteps = 1; // Calculate the step size for each color
float rStep = r/(float)nSteps;
float gStep = g/(float)nSteps;
float bStep = b/(float)nSteps; // Reset the colors to the starting position
float fr = GetRValue(startColor);
float fg = GetGValue(startColor);
float fb = GetBValue(startColor); for (int i = 0; i < nSteps; i++)
{
fr += rStep;
fg += gStep;
fb += bStep; COLORREF color = RGB((int)(fr + 0.5),(int)(fg + 0.5),(int)(fb + 0.5));
//color 即为重建颜色
}
}
你好,你讲的是RGB转换到HSL吗?
转成HLS后 就和你之前的渐变一样的方法啊HLS也是3个值对应一个颜色 ,色调 亮度 饱和度
那怎么转换成HLS呢?能不能给个函数或者讲一下这两者之间是如何转换的啊?
颜色用RGB和HSL表示有什么区别呢?
大概的转变应该是这样的过程:红色-》黄色-》绿色-》青色-》蓝色-》品红-》红色
如果只是给以上的颜色的话,比较容易实现渐变,但如果随便给一个颜色,它的RGB三个值都有值,那该怎么实现渐变呢?
所以说,我想要的是RGB颜色的渐变算法,请大家看清楚再回答
var_G = ( G / 255 )
var_B = ( B / 255 )var_Min = min( var_R, var_G, var_B ) //Min. value of RGB
var_Max = max( var_R, var_G, var_B ) //Max. value of RGB
del_Max = var_Max - var_Min //Delta RGB valueL = ( var_Max + var_Min ) / 2if ( del_Max == 0 ) //This is a gray, no chroma...
{
H = 0 //HSL results from 0 to 1
S = 0
}
else //Chromatic data...
{
if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min )
else S = del_Max / ( 2 - var_Max - var_Min ) del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max if ( var_R == var_Max ) H = del_B - del_G
else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R if ( H < 0 ) ; H += 1
if ( H > 1 ) ; H -= 1
}HSL -> RGBif ( S == 0 ) //HSL from 0 to 1
{
R = L * 255 //RGB results from 0 to 255
G = L * 255
B = L * 255
}
else
{
if ( L < 0.5 ) var_2 = L * ( 1 + S )
else var_2 = ( L + S ) - ( S * L ) var_1 = 2 * L - var_2 R = 255 * Hue_2_RGB( var_1, var_2, H + ( 1 / 3 ) )
G = 255 * Hue_2_RGB( var_1, var_2, H )
B = 255 * Hue_2_RGB( var_1, var_2, H - ( 1 / 3 ) )
}
--------------------------------------------------------------------------------Hue_2_RGB( v1, v2, vH ) //Function Hue_2_RGB
{
if ( vH < 0 ) vH += 1
if ( vH > 1 ) vH -= 1
if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
if ( ( 2 * vH ) < 1 ) return ( v2 )
if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 )
return ( v1 )
}
================然后你就3个分量逐步变化吧
你说的这个方法我知道,但是你从RGB转到HSL,然后又从HSL转回RGB有什么意义呢?
比如我红色(255 0 0)转成HSL,然后又从HSL转会RGB还是(255 0 0),这样做的意义呢?
这样还是没有解决我的问题,你有没有去试过呢?我刚才去试过了,结果就还是红色,跟我要求的没有联系。
郁闷!
就比如你告诉我怎么从(220 26 180)渐变到(255 128 64)就行。把R,G,B三个值是如何转换的告诉我就行了。我想我的问题已经描述的够清楚了,可是为什么没有人针对问题进行回答?
转成HSL之后,只需调整其中的色调分量就可以实现颜色渐变了,亮度和饱和度不用变你没有修改直接转回RGB自然没有变化拉
过程是
RGB->HSL->修改色调->RGB
如何渐变色调,使红色经过32次变化渐变到绿色?
谢谢,你说的我差不多懂了,好像是可以的但是我不太清楚,是否对于所有的RGB颜色的渐变,我转成HSL后,只改变H色调的值就可以了?其他的两个值S和L还用改变吗?例如我随便选的一个颜色(153 200 3),然后想让它渐变到另一个颜色(231 58 64),这个过程中 ,我只需要改变H的值就可以达到渐变的效果吗?
通常HSL和RGB之间的关系都会在第一章...基础中的基础
通常HSL和RGB之间的关系都会在第一章...基础中的基础
楼上那位你觉得是基础中的基础,那说明你已经是高手了吧?
那干嘛不回答我的问题,而去说那些废话?我有书的话还用来这里问吗?你不知道怎么样效率高吗?
没事一边混去吧!最鄙视那些不帮忙还说风凉话的人。多向那些星星们学习,而不是去花时间去损人!好了,问题已经解决,谢谢DarknessTM和vocanicy的认真热心耐心的帮助,再次表示感谢,马上散分!