【问题标题】:How to convert HSL to RBG in Lua如何在 Lua 中将 HSL 转换为 RGB
【发布时间】:2020-11-28 13:29:08
【问题描述】:

我想将 HSL 值转换为 RBG,以便我可以轻松地在 Love2D 中生成随机颜色,但是我无法找到如何执行此操作。我确实检查了维基百科,但真的什么都不懂,我正在浏览堆栈溢出但没有找到 Lua 的任何内容。如果可能的话,我希望函数输入 3 个值并返回一个带有 table.r、table.b、table.g 的表,以便我可以调用 function().r 等。我该怎么做?

堆栈溢出不允许我在不添加更多信息的情况下发布此内容,所以让我们看看,我不想随机化 RBG 值的原因是我只是改变色调,不影响饱和度/亮度。我认为 HSL 将是做到这一点的完美方法,因为我可以随机化一个色调颜色然后将其转换为 RBG,RBG 是 Love2D 中定义颜色的方式。

【问题讨论】:

    标签: lua love2d hsl


    【解决方案1】:

    我在https://github.com/unek/loveframes-snap-theme/blob/master/color.lua看到了你要写的函数

    这是您要从中提取的部分:

    -- Needed for hsl2rgb to work
    local function hue2rgb(p, q, t)
        if t < 0   then t = t + 1 end
        if t > 1   then t = t - 1 end
        if t < 1/6 then return p + (q - p) * 6 * t end
        if t < 1/2 then return q end
        if t < 2/3 then return p + (q - p) * (2/3 - t) * 6 end
        return p
    end
    
    -- Here's the function you want --
    
    local function hsl2rgb(h, s, l)
        local r, g, b
    
        local h = h / 360
    
        if s == 0 then
            r, g, b = l, l, l
        else
            local q = (l < 0.5) and l * (1 + s) or l + s - l * s
            local p = l * 2 - q
    
            r = hue2rgb(p, q, h + 1/3)
            g = hue2rgb(p, q, h)
            b = hue2rgb(p, q, h - 1/3)
        end
    
        return {r=r, g=g, b=b}
    end
    

    请注意,RGB 值将在[0-1] 范围内

    【讨论】:

    • love.graphics.setColor(hsl2rgb(167, 65, 45).r, hsl2rgb(167, 65, 45).g, hsl2rgb(167, 65, 45).b, 1) 我收到错误 Error main.lua:36: attempt to call global 'hsl2rgb' (a nil value) ,我尝试替换 .r .g 和.b 与 [1] [2] 和 [3] 但它仍然给出相同的错误
    • attempt to call global 我提供的代码将函数定义为local,您必须将它们放在main.lua 文件的顶部,如果您想将它们存储在单独的文件,删除local function hsl2rgb 中的local,它应该是全局的(确保在您希望使用的文件中要求单独的文件)。
    • 啊,是的,非常感谢,但现在我收到错误尝试索引数字值,函数没有返回表吗?我像 'hsl2rgb(167, 65, 45).r' 一样使用它
    • GitHub 中的原始代码没有返回表格,但在此处的副本中,我已对其进行了修改,以返回您想要的格式的表格。你能确定你的hsl2rgbreturn {r=r,g=g,b=b} 结尾吗?
    • 是的,它以return {r=r, g=g, b=b}结尾
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多