Colors Lua:颜色衰减函数
我试图创建一个函数,输入两种RGB颜色和一个百分比,然后根据百分比返回介于两者之间的颜色 我在网上的某个地方找到了Dec2Hex函数,并认为它会很有用 现在我试过:Colors Lua:颜色衰减函数,colors,lua,hex,rgb,percentage,Colors,Lua,Hex,Rgb,Percentage,我试图创建一个函数,输入两种RGB颜色和一个百分比,然后根据百分比返回介于两者之间的颜色 我在网上的某个地方找到了Dec2Hex函数,并认为它会很有用 现在我试过: function Dec2Hex(nValue) -- http://www.indigorose.com/forums/threads/10192-Convert-Hexadecimal-to-Decimal if type(nValue) == "string" then nValue = String.
function Dec2Hex(nValue) -- http://www.indigorose.com/forums/threads/10192-Convert-Hexadecimal-to-Decimal
if type(nValue) == "string" then
nValue = String.ToNumber(nValue);
end
nHexVal = string.format("%X", nValue); -- %X returns uppercase hex, %x gives lowercase letters
sHexVal = nHexVal.."";
if nValue < 16 then
return "0"..tostring(sHexVal)
else
return sHexVal
end
end
function fade_RGB(colour1, colour2, percentage)
r1, g1, b1 = string.match(colour1, "#([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])")
r2, g2, b2 = string.match(colour2, "#([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])")
r3 = (tonumber(r1, 16)/tonumber(r2, 16))*(percentage)
g3 = (tonumber(g1, 16)/tonumber(g2, 16))*(percentage)
b3 = (tonumber(b1, 16)/tonumber(b2, 16))*(percentage)
return "#"..Dec2Hex(r3).. Dec2Hex(g3)..Dec2Hex(b3)
end
函数Dec2Hex(nValue)——http://www.indigorose.com/forums/threads/10192-Convert-Hexadecimal-to-Decimal
如果类型(nValue)=“字符串”,则
nValue=String.ToNumber(nValue);
结束
nHexVal=string.format(“%X”,nValue);--%X返回大写十六进制,%X给出小写字母
sHexVal=nHexVal.“;
如果nValue<16,则
返回“0”。.tostring(sHexVal)
其他的
返回舍克斯瓦尔
结束
结束
功能淡入度_RGB(颜色1、颜色2、百分比)
r1,g1,b1=字符串匹配(颜色1,#([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F]))
r2,g2,b2=字符串匹配(颜色2,#([0-9A-F][0-9A-F])([0-9A-F][0-9A-F])([0-9A-F][0-9A-F]))
r3=(t数(r1,16)/t数(r2,16))*(百分比)
g3=(吨数(g1,16)/吨数(g2,16))*(百分比)
b3=(吨数(b1,16)/吨数(b2,16))*(百分比)
返回“#”。.Dec2Hex(r3)。。Dec2Hex(g3)…Dec2Hex(b3)
结束
我想我正朝着正确的方向前进,但数学是错误的,我不知道如何解决它。提前谢谢 如果我是对的,那就行了
r3 = (tonumber(r1, 16)/tonumber(r2, 16))*(percentage)
应该是
r3 = math.abs(tonumber(r1, 16) - tonumber(r2, 16))*(percentage/100)
其他类似的线路遵循相同的概念
编辑:
应该为
fade_RGB(“#FF0000“,#0000FF,0)
生成红色,为fade_RGB(“#FF0000“,#0000FF,100)
,没有名字的答案几乎正确,但他没有根据百分比合并这两种颜色
相反,您想要做的是对两个值进行线性插值(尽管我们知道人类视觉/光照方面这不是插值颜色的工作方式,但很多库都是这样做的,因为它很容易,并且适用于简单的情况)
正如您可能注意到的那样,将百分比乘以100和除以100有点乏味,因此您可能希望将其传递给已除以的数值。tonumber(r1,16)做什么?我已经有一段时间没碰Lua了。把十六进制转换成小数像这样吗
r3=math.abs(tonumber(r1,16)-tonumber(r2,16))*(百分比/100)
!犯错误其实还是不对。我希望这样,如果你输入:淡入RGB(“#FF0000”,“#0000FF”,0),你会返回红色。褪色RGB(“#FF0000”,“#0000FF”,100)应为蓝色。和褪色RGB(“#FF0000”,“#0000FF”,50)应该是洋红色或介于两者之间的任何颜色。现在你的答案是100%给出两种颜色的50/50混合,而0%只是黑色。给我一秒钟;我会想办法解决我们的问题。另外,格式
不抱怨似乎需要一个数学地板
。
r3 = math.min(tonumber(r1, 16), tonumber(r2, 16)) +
math.abs(tonumber(r1, 16) - tonumber(r2, 16)) * (percentage/100)
r3 = tonumber(r1, 16)*(100-percentage)/100.0 + tonumber(r2, 16)*(percentage)/100.0