Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSurfaceColorimetryIccUtils.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QDebug>
10
11namespace KisSurfaceColorimetry {
12
30
54
56{
58
59 if (std::holds_alternative<NamedPrimaries>(cs.primaries)) {
60 request.colorPrimariesType =
61 namedPrimariesToPigmentPrimaries(std::get<NamedPrimaries>(cs.primaries));
62 } else if (std::holds_alternative<Colorimetry>(cs.primaries)) {
63 auto colorimetry = std::get<Colorimetry>(cs.primaries);
64 request.colorants = {
65 colorimetry.white().toxy().x, colorimetry.white().toxy().y,
66 colorimetry.red().toxy().x, colorimetry.red().toxy().y,
67 colorimetry.green().toxy().x, colorimetry.green().toxy().y,
68 colorimetry.blue().toxy().x, colorimetry.blue().toxy().y,
69 };
70 }
71
72 if (std::holds_alternative<NamedTransferFunction>(cs.transferFunction)) {
73 request.transferFunction =
74 namedTransferFunctionToPigmentTransferFunction(std::get<NamedTransferFunction>(cs.transferFunction));
75 } else if (std::holds_alternative<uint32_t>(cs.transferFunction)) {
76 auto gamma = std::get<uint32_t>(cs.transferFunction); // gamma * 10000
77 if (gamma == 10000) {
78 request.transferFunction = TRC_LINEAR;
79 } else if (gamma == 18000) {
80 request.transferFunction = TRC_GAMMA_1_8;
81 } else if (gamma == 22000) {
82 request.transferFunction = TRC_ITU_R_BT_470_6_SYSTEM_M;
83 } else if (gamma == 24000) {
84 request.transferFunction = TRC_GAMMA_2_4;
85 } else if (gamma == 28000) {
86 request.transferFunction = TRC_ITU_R_BT_470_6_SYSTEM_B_G;
87 }
88 }
89
90 // any pq-space that is not bt2020pq is considered unsupported
91
92 if (request.transferFunction == TRC_ITU_R_BT_2100_0_PQ &&
93 request.colorPrimariesType != PRIMARIES_ITU_R_BT_2020_2_AND_2100_0) {
94
95 request.transferFunction = TRC_UNSPECIFIED;
96 request.colorants.clear();
97 }
98
99 return request;
100}
101
102} // namespace KisSurfaceColorimetry
ColorPrimaries
The colorPrimaries enum Enum of colorants, follows ITU H.273 for values 0 to 255, and has extra known...
@ PRIMARIES_ITU_R_BT_2020_2_AND_2100_0
@ PRIMARIES_UNSPECIFIED
@ PRIMARIES_SMPTE_RP_431_2
@ PRIMARIES_ADOBE_RGB_1998
@ PRIMARIES_SMPTE_EG_432_1
@ PRIMARIES_ITU_R_BT_709_5
TransferCharacteristics
The transferCharacteristics enum Enum of transfer characteristics, follows ITU H.273 for values 0 to ...
@ TRC_ITU_R_BT_470_6_SYSTEM_M
@ TRC_ITU_R_BT_470_6_SYSTEM_B_G
@ TRC_ITU_R_BT_2100_0_PQ
@ TRC_IEC_61966_2_1
@ TRC_ITU_R_BT_709_5
@ TRC_SMPTE_ST_428_1
PigmentProfileRequest colorSpaceToRequest(ColorSpace cs)
ColorPrimaries namedPrimariesToPigmentPrimaries(NamedPrimaries primaries)
TransferCharacteristics namedTransferFunctionToPigmentTransferFunction(NamedTransferFunction transfer)
std::variant< NamedPrimaries, Colorimetry > primaries
std::variant< NamedTransferFunction, uint32_t > transferFunction