8#ifndef _KO_LAB_COLORSPACE_TRAITS_H_
9#define _KO_LAB_COLORSPACE_TRAITS_H_
26template<
typename _channels_type_>
80 return QString(
"Error");
82 switch (channelIndex) {
84 return QString().setNum(100.0 * qBound((qreal)0, ((qreal)c) / math_trait::unitValueL, (qreal)math_trait::unitValueL));
87 if (c <= math_trait::halfValueAB) {
88 return QString().setNum(100.0 * (qreal)((c - math_trait::zeroValueAB) / (2.0 * (math_trait::halfValueAB - math_trait::zeroValueAB))));
90 return QString().setNum(100.0 * (qreal)(0.5 + (c - math_trait::halfValueAB) / (2.0 * (math_trait::unitValueAB - math_trait::halfValueAB))));
93 return QString().setNum(100.0 * qBound((qreal)0, ((qreal)c) / math_trait::unitValue, (qreal)math_trait::unitValue));
95 return QString(
"Error");
102 float *channels =
v.data();
107 channels[i] = (qreal)c / math_trait::unitValueL;
111 if (c <= math_trait::halfValueAB) {
112 channels[i] = ((qreal)c - math_trait::zeroValueAB) / (2.0 * (math_trait::halfValueAB - math_trait::zeroValueAB));
114 channels[i] = 0.5 + ((qreal)c - math_trait::halfValueAB) / (2.0 * (math_trait::unitValueAB - math_trait::halfValueAB));
120 channels[i] = (qreal)c / math_trait::unitValue;
133 b = qBound((
float)math_trait::zeroValueL,
134 (
float)math_trait::unitValueL * values[i],
135 (
float)math_trait::unitValueL);
139 if (values[i] <= 0.5) {
140 b = qBound((
float)math_trait::zeroValueAB,
141 (
float)(math_trait::zeroValueAB + 2.0 * values[i] * (math_trait::halfValueAB - math_trait::zeroValueAB)),
142 (
float)math_trait::halfValueAB);
145 b = qBound((
float)math_trait::halfValueAB,
146 (
float)(math_trait::halfValueAB + 2.0 * (values[i] - 0.5) * (math_trait::unitValueAB - math_trait::halfValueAB)),
147 (
float)math_trait::unitValueAB);
151 b = qBound((
float)math_trait::min,
152 (
float)math_trait::unitValue * values[i],
153 (
float)math_trait::unitValue);
static const quint32 channels_nb
the number of channels in this color space
static const channels_type * nativeArray(const quint8 *a)
static channels_type b(quint8 *data)
KoColorSpaceTrait< _channels_type_, 4, 3 > parent
static void fromNormalisedChannelsValue(quint8 *pixel, const QVector< float > &values)
static const qint32 a_pos
KoLabColorSpaceMathsTraits< channels_type > math_trait
_channels_type_ channels_type
static void setA(quint8 *data, channels_type nv)
Set the a component.
static void normalisedChannelsValue(const quint8 *pixel, QVector< float > &v)
static const qint32 L_pos
static void setL(quint8 *data, channels_type nv)
Set the L component.
static QString normalisedChannelValueText(const quint8 *pixel, quint32 channelIndex)
static channels_type L(quint8 *data)
static channels_type a(quint8 *data)
static const qint32 b_pos
static void setB(quint8 *data, channels_type nv)
Set the a component.