25 bool supportsLightness,
27 bool supportsSaturation)
36 supportsHue = supportsHue && supportsLightness;
37 supportsSaturation = supportsSaturation && supportsLightness;
44 if (maxChannels >= 0 && maxChannels == sortedChannels.size()) {
49 supportsLightness =
false;
51 supportsSaturation =
false;
52 }
else if (maxChannels >= 0 && maxChannels == sortedChannels.size() + 2) {
58 supportsSaturation =
false;
66 if (supportsLightness) {
79 if (supportsSaturation) {
83 if (supportsLightness) {
87 if (maxChannels >= 0 && vchannels.size() > maxChannels) {
88 vchannels.resize(maxChannels);
118 if (transfers.size() >
int(virtualChannels.size())) {
123 bool colorsNull =
true;
125 bool saturationNull =
true;
126 bool lightnessNull =
true;
127 bool allColorsNull =
true;
128 int alphaIndexInReal = -1;
136 for (
int i = 0; i < virtualChannels.size(); i++) {
138 realTransfers << transfers[i];
140 if (virtualChannels[i].isAlpha()) {
141 alphaIndexInReal = realTransfers.size() - 1;
144 if (colorsNull && !transferIsIdentity[i]) {
149 hueTransfer = transfers[i];
151 if (hueNull && !transferIsIdentity[i]) {
156 saturationTransfer = transfers[i];
158 if (saturationNull && !transferIsIdentity[i]) {
159 saturationNull =
false;
163 lightnessTransfer = transfers[i];
165 if (lightnessNull && !transferIsIdentity[i]) {
166 lightnessNull =
false;
170 allColorsTransfer = transfers[i];
172 if (allColorsNull && !transferIsIdentity[i]) {
173 allColorsNull =
false;
188 int missingTransfers = qMax(0,
int(cs->
channelCount()-realTransfers.size()));
189 for (
int i=0; i < missingTransfers; i++) {
194 const quint16** transfers =
new const quint16*[realTransfers.size()];
195 for(
int i = 0; i < realTransfers.size(); ++i) {
196 transfers[i] = realTransfers[i].constData();
203 alphaIndexInReal == (realTransfers.size() - 1));
211 QHash<QString, QVariant> params;
212 params[
"curve"] = QVariant::fromValue(hueTransfer);
214 params[
"relative"] =
false;
222 if (!saturationNull) {
223 QHash<QString, QVariant> params;
224 params[
"curve"] = QVariant::fromValue(saturationTransfer);
226 params[
"relative"] =
false;
234 if (!lightnessNull) {
238 if (!allColorsNull) {
239 const quint16** allColorsTransfers =
new const quint16*[realTransfers.size()];
240 for(
int i = 0; i < realTransfers.size(); ++i) {
241 allColorsTransfers[i] = (i != alphaIndexInReal) ?
242 allColorsTransfer.constData() : 0;
249 alphaIndexInReal == (realTransfers.size() - 1));
253 delete[] allColorsTransfers;
257 allTransforms << colorTransform;
258 allTransforms << allColorsTransform;
259 allTransforms << hueTransform;
260 allTransforms << saturationTransform;
261 allTransforms << lightnessTransform;