Преобразователь пространства цветов
Первая простая версия
color_space1.cpp
Большинство пространств представлены ввиде плавающих чисел. Значения плавающих чисел
не контролируются на выход за пределы пространства. Диапазоны значений в отдельных цветовых
пространствах:
- RGB, CMYK - ограничено заданной зарядтостью целых чисел (проверяется на выход за диапазон)
- XYZ - ограничено значениями от нуля до RX RY RZ
- Yxy - xy величины нормируются до 1.
- HSV, HSL - ограничено значениями 0..1
- LCH - h измеряется в градусах 0..360
- LAB - l в пределах 0..100. a,b - условно можно считать в пределах -128..+128
Сокращёная версия
color_space2.cpp
Прилизанный вариант программы, формулы которого немного оптимизированы. А не используемые на практике цветовые пространства удалены.
- HSL преобразование переведено полностью на цельночисленные вычисления. Характер погрешностей при вычислениях изменялся. Но в целом удалось
избавиться не только от целых чисел и в двое повысить скорость вычислений, но и так же снизить общую погрешность вычислений.
- XYZ, LAB оставлено в плавающием виде (включая результат). Их можно было перевести целиком на плавающие вычисления, заменив формулы с дробными степенями и делением, банальными таблицами.
Или подменить конечный результат целыми числами, но я решил что это будет непрактично.
Справочные данные
Observer | 2° (CIE 1931) | 10° (CIE 1964) |
Illuminant | X2 | Y2 | Z2 | X10 | Y10 | Z10 |
A (Incandescent) | 109.850 | 100 | 35.585 | 111.144 | 100 | 35.200 |
C | 98.074 | 100 | 118.232 | 97.285 | 100 | 116.145 |
D50 | 96.422 | 100 | 82.521 | 96.720 | 100 | 81.427 |
D55 | 95.682 | 100 | 92.149 | 95.799 | 100 | 90.926 |
D65 (Daylight) | 95.047 | 100 | 108.883 | 94.811 | 100 | 107.304 |
D75 | 94.972 | 100 | 122.638 | 94.416 | 100 | 120.641 |
F2 (Fluorescent) | 99.187 | 100 | 67.395 | 103.280 | 100 | 69.026 |
F7 | 95.044 | 100 | 108.755 | 95.792 | 100 | 107.687 |
F11 | 100.966 | 100 | 64.370 | 103.866 | 100 | 65.627 |
Ссылки