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{
57 KoColorProfileQuery request;
58
59 if (std::holds_alternative<NamedPrimaries>(cs.primaries)) {
60 request.primaries =
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.whitePoint = colorimetry.white().toxy();
65 request.rgbColorants << colorimetry.red().toxy() << colorimetry.green().toxy() << colorimetry.blue().toxy();
66 }
67
68 if (std::holds_alternative<NamedTransferFunction>(cs.transferFunction)) {
69 request.transfer =
70 namedTransferFunctionToPigmentTransferFunction(std::get<NamedTransferFunction>(cs.transferFunction));
71 } else if (std::holds_alternative<uint32_t>(cs.transferFunction)) {
72 auto gamma = std::get<uint32_t>(cs.transferFunction); // gamma * 10000
73 if (gamma == 10000) {
74 request.transfer = TRC_LINEAR;
75 } else if (gamma == 18000) {
76 request.transfer = TRC_GAMMA_1_8;
77 } else if (gamma == 22000) {
78 request.transfer = TRC_ITU_R_BT_470_6_SYSTEM_M;
79 } else if (gamma == 24000) {
80 request.transfer = TRC_GAMMA_2_4;
81 } else if (gamma == 28000) {
82 request.transfer = TRC_ITU_R_BT_470_6_SYSTEM_B_G;
83 }
84 }
85
86 // any pq-space that is not bt2020pq is considered unsupported
87
88 if (request.transfer == TRC_ITU_R_BT_2100_0_PQ &&
89 request.primaries != PRIMARIES_ITU_R_BT_2020_2_AND_2100_0) {
90
91 request.transfer = TRC_UNSPECIFIED;
92 request.rgbColorants.clear();
93 }
94
95 return request;
96}
97
98} // 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
ColorPrimaries namedPrimariesToPigmentPrimaries(NamedPrimaries primaries)
KoColorProfileQuery colorSpaceToRequest(ColorSpace cs)
TransferCharacteristics namedTransferFunctionToPigmentTransferFunction(NamedTransferFunction transfer)
std::variant< NamedPrimaries, Colorimetry > primaries
std::variant< NamedTransferFunction, uint32_t > transferFunction
The KoColorProfileQuery struct.
ColorPrimaries primaries
Rgb Primaries of the profile. When empty, this is a query for a greyscale profile.