You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lua代码生成指定13×9RGB调色板(无需依赖完整色值表)

基于首行色值生成对称RGB调色板的高效Lua实现

需求拆解

13列9行的对称调色板核心特征是行对称:第1行与第9行完全一致,第2行与第8行一致,第3行与第7行一致,第4行与第6行一致,第5行为中间基准行(通常是首行色值的暗调/中间调变体)。我们仅需基于首行13个十六进制色值,通过亮度线性缩放即可实现完全匹配的对称效果。

核心实现思路

  1. 色值转换工具:将十六进制色值(如#FF0000)解析为0-255范围的RGB分量,处理完成后再转回十六进制格式。
  2. 对称亮度系数生成:生成9个对称的亮度缩放系数,比如从1.0(首行)线性降到0.2(中间行),再线性升回1.0,确保行对称逻辑成立。
  3. 批量生成调色板:遍历每个亮度系数,对首行所有色值的RGB分量进行缩放(取整并限制范围避免溢出),组合成完整的9行调色板。

高效Lua代码实现

-- 十六进制色值转RGB分量
local function hex2rgb(hex)
    hex = hex:gsub("#", "")
    return {
        tonumber(hex:sub(1,2), 16),
        tonumber(hex:sub(3,4), 16),
        tonumber(hex:sub(5,6), 16)
    }
end

-- RGB分量转十六进制色值
local function rgb2hex(r, g, b)
    return string.format("#%02X%02X%02X", 
        math.min(math.max(r, 0), 255),
        math.min(math.max(g, 0), 255),
        math.min(math.max(b, 0), 255)
    )
end

-- 生成对称调色板
local function generateSymmetricPalette(firstRow)
    -- 可根据实际需求调整亮度系数,实现不同明暗渐变效果
    local brightnessSteps = {1.0, 0.8, 0.6, 0.4, 0.2, 0.4, 0.6, 0.8, 1.0}
    local palette = {}

    -- 预解析首行所有色值的RGB分量,避免重复解析浪费性能
    local firstRowRGB = {}
    for _, hex in ipairs(firstRow) do
        table.insert(firstRowRGB, hex2rgb(hex))
    end

    -- 逐行生成调色板
    for _, step in ipairs(brightnessSteps) do
        local row = {}
        for _, rgb in ipairs(firstRowRGB) do
            local r = math.floor(rgb[1] * step)
            local g = math.floor(rgb[2] * step)
            local b = math.floor(rgb[3] * step)
            table.insert(row, rgb2hex(r, g, b))
        end
        table.insert(palette, row)
    end

    return palette
end

-- 示例使用
local firstRow = {"#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF", "#FFFFFF", "#CCCCCC", "#999999", "#666666", "#333333", "#000000", "#808080"}
local myPalette = generateSymmetricPalette(firstRow)

-- 打印验证结果
for i, row in ipairs(myPalette) do
    print("第" .. i .. "行:" .. table.concat(row, ", "))
end

代码优化说明

  • 预解析首行色值:提前将首行所有十六进制色值转为RGB分量,避免在每行循环中重复解析,大幅提升生成效率。
  • 边界值安全处理:在rgb2hex中通过math.min/math.max确保RGB分量始终处于0-255的合法范围,避免色值溢出导致的异常。
  • 系数灵活配置:brightnessSteps数组可根据调色板的明暗需求自由调整,甚至替换为非线性系数实现更自然的渐变效果。

内容的提问来源于stack exchange,提问作者A_CE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:52:49