# lcms

Библиотека для управления цветом, реализующая модуль Color Management System (CMS). Она предоставляет инструменты для преобразования цветов между различными цветовыми пространствами, работы с ICC-профилями и обеспечения точного воспроизведения цвета на разных устройствах. Библиотека широко используется в графических приложениях, операционных системах и встраиваемых системах для обеспечения консистентности цветопередачи.

## Особенности

- полная поддержка стандарта ICC (International Color Consortium) для работы с цветовыми профилями;
- преобразование цветов между различными цветовыми пространствами (RGB, CMYK, Lab, XYZ и др.);
- поддержка как 8-битных, так и 16-битных и с плавающей точкой цветовых данных;
- малый размер и минимальные зависимости, подходит для встраиваемых систем.

## Основные компоненты

LCMS состоит из нескольких модулей, которые обеспечивают все функции системы управления цветом, от чтения ICC-профилей до выполнения сложных преобразований (подробнее с документацией можно ознакомиться [здесь](https://www.littlecms.com/)).

### Работа с ICC-профилями

Библиотека предоставляет полный набор функций для чтения, записи, создания и управления ICC-профилями. Это включает поддержку различных версий стандарта ICC и работу с профилями устройств, пространств соединения и абстрактными профилями.

Основные функции работы с профилями:

- `cmsOpenProfileFromFile()`, `cmsOpenProfileFromMem()` — открытие профилей из файла или памяти;
- `cmsCloseProfile()` — закрытие профиля и освобождение ресурсов;
- `cmsCreateRGBProfile()`, `cmsCreateLab4Profile()` — создание стандартных профилей;
- `cmsSaveProfileToFile()`, `cmsSaveProfileToMem()` — сохранение профилей;
- `cmsGetProfileInfo()` — получение информации о профиле (описание, производитель и др.);
- `cmsGetPCS()` и `cmsGetColorSpace()` — получение цветового пространства профиля.

### Преобразование цветов

LCMS предоставляет мощный механизм для создания трансформ — объектов, которые выполняют преобразование цветов из одного цветового пространства в другое с учетом заданных ICC-профилей и параметров рендеринга.

Функции создания и использования трансформ:

- `cmsCreateTransform()` — создание трансформации на основе входного и выходного профилей;
- `cmsCreateMultiprofileTransform()` — создание трансформации с несколькими профилями;
- `cmsDoTransform()` — применение трансформации к массиву цветовых данных;
- `cmsDeleteTransform()` — удаление трансформации и освобождение ресурсов;
- `cmsChangeBuffersFormat()` — изменение формата данных в буфере без изменения цвета.

### Поддержка различных форматов данных

Библиотека поддерживает множество форматов цветовых данных, включая различные разрядности, порядки каналов и упаковки. Это позволяет интегрировать LCMS в различные графические конвейеры без необходимости преобразования данных.

Поддерживаемые форматы:

- Целочисленные форматы: 8-бит, 16-бит на канал;
- Форматы с плавающей точкой: 32-бит float, 16-бит half-float (опционально);
- Порядок каналов: RGB, BGR, ARGB, CMYK, Lab, XYZ;
- Планерные и чанкированные (interleaved) данные.

### Работа с тегами профилей

Библиотека позволяет читать и записывать теги ICC-профилей, что полезно для работы с метаданными и кастомными расширениями профилей.

Функции работы с тегами:

- `cmsReadTag()` — чтение данных тега профиля;
- `cmsWriteTag()` — запись данных в тег профиля;
- `cmsTagLinkedTo()` — определение связи между тегами;
- Поддержка как стандартных, так и частных (private) тегов.

### Цветовые преобразования без ICC-профилей

LCMS также предоставляет функции для базовых цветовых преобразований без необходимости использования ICC-профилей. Это полезно для простых операций или когда полный профиль не требуется.

Базовые цветовые функции:

- `cmsXYZ2Lab()`, `cmsLab2XYZ()` — преобразование между XYZ и Lab;
- `cmsXYZ2xyY()`, `cmsxyY2XYZ()` — преобразование между XYZ и xyY;
- `cmsDeltaE()` — вычисление цветовой разницы (ΔE) между двумя цветами;
- `cmsWhitePointFromTemp()` — получение белой точки по цветовой температуре.

### Интеграция с графическими системами

LCMS может интегрироваться с различными графическими системами и библиотеками, такими как GIMP, ImageMagick, и поддерживает плагины для популярных приложений.

Точки интеграции:

- Поддержка плагинов для Photoshop через формат 8BF;
- Интеграция с GIMP через плагин GIMP-LCMS;
- Использование в ImageMagick и GraphicsMagick для цветовых преобразований.
