Исходник [2.0.0] color.lua / библиотека для работы с цветами

Musaigen

ihatemyself
Автор темы
Проверенный
1,687
1,547
color.lua - многофункциональная библиотека для работы с цветами в Lua. Эта библиотека была создана с целью упростить манипуляции с цветами в различных форматах (RGB, ARGB, HSV, HSL и др.), а также добавить возможность создания палитр, градиентов, теней, контрастных цветов и многого другого.

Функционал:
  • Создание цветов из разных представлений:
    • RGB / BGR
    • RGBA / ARGB / ABGR / BGRA
    • HSV / HSL
    • Oklab
    • Единичные значения (0–1)
  • Получение компонентов цвета:
    • getRed, getGreen, getBlue, getAlpha
    • getHue, getSaturation, getValue, getLightness
    • getOklabA, getOklabB, getOklabLightness
  • Установка отдельных компонентов цвета:
    • setRed, setGreen, setBlue, setAlpha
    • setHue, setSaturation, setValue, setLightness
    • setOklabA, setOklabB, setOklabLightness (а также with* вариации, что создают копию цвета, изменяя определенный компонент)
  • Конвертация между цветовыми моделями:
    • asRGB, asBGR, asARGB, asRGBA, asABGR, asBGRA, asHSV, asHSL, asOklab
    • unpackAsARGB, unpackAsRGBA, и другие unpackAs* для получения цвета по соответствующим компонентам.
  • Операции с цветами:
    • Линейная интерполяция (lerp)
    • Кубическая интерполяция (catmullRom)
    • Создание палитры (palette)
    • Градиенты (gradient)
    • Тени (shadow)
    • Инвертирование цвета (inverted)
    • Вычисление контраста (contrastWith)
  • Работа с предопределенными цветами:
    • WHITE, BLACK, RED, BLUE, GREEN, YELLOW, CYAN, MAGENTA, GRAY и другие
  • Дополнительные утилиты:
    • Проверка, является ли цвет тёмным или светлым (isDark, isLight)
    • Сравнение цветов (equal)
    • Изменение тона (tone, darker, lighter)
    • Адаптация по Adobe-style (adobe)
Установка: переместить файл color.lua в вашу папку moonloader/lib.
Использование:
(также что-то потыкать можно в простом демо-файле, который нужно установить в папку moonloader)
Lua:
-- Подключаем библиотеку Color
local Color = require("color")

-- 1. Создаём красный цвет
local red = Color.RED
print("Красный цвет:", red:getRed(), red:getGreen(), red:getBlue())

-- 2. Создаём зелёный цвет из HSV
local green = Color.HSV(120, 1, 1)
print("Зелёный цвет:", green:getRed(), green:getGreen(), green:getBlue())

-- 3. Линейная интерполяция между красным и зелёным (50%)
local yellowish = red:lerp(green, 0.5)
print("Полутон красно-зелёного:", yellowish:getRed(), yellowish:getGreen(), yellowish:getBlue())

-- 4. Получаем компоненты в разных форматах
print("ARGB:", string.format("%X", yellowish:asARGB()))
print("RGBA:", string.format("%X", yellowish:asRGBA()))
print("ABGR:", string.format("%X", yellowish:asABGR()))
print("BGRA:", string.format("%X", yellowish:asBGRA()))

-- 5. Получаем значения HSL
local h, s, l = yellowish:asHSL()
print(string.format("HSL: %.1f°, %.2f, %.2f", h, s, l))

-- 6. Изменяем яркость на 20%
local lighter = yellowish:lighter(2)
print("Светлее:", lighter:getRed(), lighter:getGreen(), lighter:getBlue())

-- 7. Создаём тень цвета
local shadow = yellowish:shadow(0.3)
print("Тень:", shadow:getRed(), shadow:getGreen(), shadow:getBlue())

-- 8. Проверка контраста между двумя цветами
local contrast = red:contrastWith(green)
print("Контраст между красным и зелёным:", contrast)

-- 9. Инвертируем цвет
local inverted = red:inverted()
print("Инвертированный красный:", inverted:getRed(), inverted:getGreen(), inverted:getBlue())

-- 10. Генерация градиента из красного в синий (5 шагов)
local gradient = red:gradient(Color.BLUE, 5)
for i, color in ipairs(gradient) do
  print("Градиент " .. i .. ":", color:getRed(), color:getGreen(), color:getBlue())
end

-- 11. Генерация палитры цветов на основе зелёного
local palette = green:palette(6)
for i, color in ipairs(palette) do
  print("Цвет в палитре " .. i .. ":", color:getRed(), color:getGreen(), color:getBlue())
end

-- 12. Работа с альфа-каналом
local transparent_green = green:withAlpha(128)
print("Прозрачный зелёный:", transparent_green:getRed(), transparent_green:getGreen(), transparent_green:getBlue(), transparent_green:getAlpha())

-- 13. Использование псевдонимов для получения HSV и HSL значений
local hue, sat, val = green:unpackAsHSV()
print("HSV через unpackAsHSV:", hue, sat, val)

local hue2, sat2, light = green:unpackAsHSL()
print("HSL через unpackAsHSL:", hue2, sat2, light)
 

Вложения

  • сolor-demo.lua
    8.9 KB · Просмотры: 6
  • color.lua
    51.8 KB · Просмотры: 13
Последнее редактирование:

Musaigen

ihatemyself
Автор темы
Проверенный
1,687
1,547
Обновление 2.0.0:
1. Добавлена работа с Oklab (Color.Oklab, Color.asOklab = Color.unpackAsOklab, Color.get/setOklab*)
2. Все операции перенесены на Oklab.
3. Убраны параметры saturation/value с некоторых функций.
4. Переписано демо.
5. Что-то ещё по мелочи, все равно никто не читает.