7.2 KiB
Raw Blame History

О библиотеке

Color - библиотека для работы с цветом. Она позволяет осуществлять экструзию и упаковку цветовых каналов, преобразовывать цветовую модель RGB в HSB и наоборот, осуществлять альфа-блендинг, генерировать цветовые транзиции и конвертировать цвет в 8-битный формат для палитры OpenComputers.

Установка

Исходный код доступен по ссылке: https://github.com/IgorTimofeev/OpenComputers/blob/master/lib/color.lua

Для загрузки на компьютер вы можете воспользоваться стандартной утилитой wget:

wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/color.lua -f

Работа с цветовыми каналами

color.RGBToInteger( red, green, blue ): int IntegerColor

Тип Аргумент Описание
byte [0; 255] red Красный цветовой канал
byte [0; 255] green Зеленый цветовой канал
byte [0; 255] blue Синий цветовой канал

Метод упаковывает три цветовых канала и возвращает 24-битную целочисленную переменную

color.IntegerToRGB( IntegerColor ): byte red, byte green, byte blue

Тип Аргумент Описание
int IntegerColor Цвет в формате 0xRRGGBB

Метод извлекает и возвращает три цветовых канала из 24-битной целочисленной переменной. Значения возвращаемых данных находятся в диапазоне [0; 255]

Обработка цвета

color.blend( firstColor, secondColor, secondColorTransparency ): int blendedColor

Тип Аргумент Описание
int firstColor Первый цвет
int secondColor Второй цвет
float [0.0; 1.0] secondColorTransparency Прозрачность второго цвета при наложении

Метод накладывает второй цвет на первый, учитывая прозрачность второго. К примеру, если на красный цвет 0xFF0000 наложить черный цвет 0x000000 с прозрачностью 0.5, то в результате получится цвет 0x7F0000, то бишь, темно-красный

color.transition( firstColor, secondColor, position ): int transitionColor

Тип Аргумент Описание
int firstColor Первый цвет
int secondColor Второй цвет
float [0.0; 1.0] position Позиция точки перехода от первого цвета ко второму

Метод генерирует переходный цвет между первым и вторым цветом, основываясь на аргументе transition, где значение 0.0 эквивалентно первому цвету, а 1.0 - второму. К примеру, если осуществить переход от черного цвета 0x000000 к белому 0xFFFFFF с позицией перехода 0.5, то в результате получится цвет 0x7F7F7F, то бишь, серый.

Преобразование цветовых моделей

color.RGBToHSB( red, green, blue ): int hue, float saturation, float brightness

Тип Аргумент Описание
byte [0; 255] red Красный цветовой канал
byte [0; 255] green Зеленый цветовой канал
byte [0; 255] blue Синий цветовой канал

Метод преобразует три цветовых канала цветовой модели RGB в цветовую модель HSB (HSV) и возвращает соответствующий результат. Значения возвращаемых данных hue находится в диапазоне [0; 360], а saturation и brightness - в диапазоне [0.0; 1.0].

Для удобства также имеется метод color.IntegerToHSB(int integerColor): int hue, float saturation, float brightness

color.HSBToRGB( hue, saturation, brightness ): byte red, byte green, byte blue

Тип Аргумент Описание
int [0; 360] hue Оттенок
float [0.0; 1.0] saturation Насыщенность
float [0.0; 1.0] brightness Яркость

Метод преобразует параметры цветовой модели HSB (HSV) в три цветовых канала модели RGB и возвращает соответствующий результат.

Для удобства также имеется метод color.HSBToInteger(int hue, float saturation, float brightness): int integerColor

Компрессия цвета

color.to8Bit( 24BitColor ): byte 8BitColor

Тип Аргумент Описание
int 24BitColor Цвет в формате 0xRRGGBB

Метод обращается к 256-цветной палитре OpenComputers и возвращает индекс цвета, наилучшим образом соответствующего переданному значению, используя тот же метод поиска, что и в gpu.setBackground(color). В результате возвращается переменная в диапазоне [0; 255], которая может быть использована для записи в бинарный файл, позволяя экономить память. Обращаю внимание, что метод медленный, и не подходит для отрисовки графики на экране.

color.to24Bit( 8BitColor ): int 24BitColor

Тип Аргумент Описание
int 8BitColor Индекс палитры OpenComputers

Метод позволяет осуществить обратное преобразование 8-битного индекса, созданного методом color.to8Bit.