Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colors Lua:颜色衰减函数_Colors_Lua_Hex_Rgb_Percentage - Fatal编程技术网

Colors Lua:颜色衰减函数

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.

我试图创建一个函数,输入两种RGB颜色和一个百分比,然后根据百分比返回介于两者之间的颜色

我在网上的某个地方找到了Dec2Hex函数,并认为它会很有用

现在我试过:

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