Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_qmic_simple_convertor.cpp File Reference
#include "kis_qmic_simple_convertor.h"
#include <array>
#include <cstddef>
#include <map>
#include <memory>
#include <vector>
#include <kis_debug.h>
#include <kis_random_accessor_ng.h>
#include <KoColorModelStandardIds.h>
#include <KoColorSpace.h>
#include <KoColorSpaceRegistry.h>
#include <KoColorSpaceTraits.h>
#include <KoCompositeOpRegistry.h>

Go to the source code of this file.

Classes

class  KisColorFromFloat< _channel_type_, traits >
 
class  KisColorFromGrayScaleAlphaFloat< _channel_type_, traits >
 
class  KisColorFromGrayScaleFloat< _channel_type_, traits >
 
class  KisColorToFloatConvertor< _channel_type_, traits >
 

Macros

#define SCALE_FROM_FLOAT(v)    KoColorSpaceMaths<float, _channel_type_>::scaleToA(v)
 
#define SCALE_TO_FLOAT(v)   KoColorSpaceMaths<_channel_type_, float>::scaleToA(v)
 

Typedefs

using KoColorTransformationSP = std::shared_ptr<KoColorTransformation>
 

Functions

static KoColorTransformationcreateTransformation (const KoColorSpace *colorSpace)
 
static KoColorTransformationcreateTransformationFromGmic (const KoColorSpace *colorSpace, int gmicSpectrum, float gmicUnitValue)
 
std::map< QString, QString > reverseMap ()
 

Variables

const std::map< QString, QString > blendingModeMap
 

Macro Definition Documentation

◆ SCALE_FROM_FLOAT

#define SCALE_FROM_FLOAT ( v)     KoColorSpaceMaths<float, _channel_type_>::scaleToA(v)

Definition at line 26 of file kis_qmic_simple_convertor.cpp.

26#define SCALE_FROM_FLOAT(v) \
27 KoColorSpaceMaths<float, _channel_type_>::scaleToA(v)

◆ SCALE_TO_FLOAT

#define SCALE_TO_FLOAT ( v)    KoColorSpaceMaths<_channel_type_, float>::scaleToA(v)

Definition at line 25 of file kis_qmic_simple_convertor.cpp.

Typedef Documentation

◆ KoColorTransformationSP

Definition at line 29 of file kis_qmic_simple_convertor.cpp.

Function Documentation

◆ createTransformation()

static KoColorTransformation * createTransformation ( const KoColorSpace * colorSpace)
static

Definition at line 334 of file kis_qmic_simple_convertor.cpp.

335{
336 KoColorTransformation *colorTransformation = nullptr;
337 if (colorSpace->colorModelId() != RGBAColorModelID) {
338 dbgKrita << "Unsupported color space for fast pixel transformation to "
339 "gmic pixel format"
340 << colorSpace->id();
341 return nullptr;
342 }
343
344 if (colorSpace->colorDepthId() == Float32BitsColorDepthID) {
345 colorTransformation =
347 }
348#ifdef HAVE_OPENEXR
349 else if (colorSpace->colorDepthId() == Float16BitsColorDepthID) {
350 colorTransformation =
352 }
353#endif
354 else if (colorSpace->colorDepthId() == Integer16BitsColorDepthID) {
355 colorTransformation =
357 } else if (colorSpace->colorDepthId() == Integer8BitsColorDepthID) {
358 colorTransformation =
360 } else {
361 dbgKrita << "Unsupported color space " << colorSpace->id()
362 << " for fast pixel transformation to gmic pixel format";
363 return nullptr;
364 }
365 return colorTransformation;
366}
const KoID Float32BitsColorDepthID("F32", ki18n("32-bit float/channel"))
const KoID Float16BitsColorDepthID("F16", ki18n("16-bit float/channel"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
virtual KoID colorModelId() const =0
virtual KoID colorDepthId() const =0
#define dbgKrita
Definition kis_debug.h:45

References KoColorSpace::colorDepthId(), KoColorSpace::colorModelId(), dbgKrita, Float16BitsColorDepthID, Float32BitsColorDepthID, KoColorSpace::id, Integer16BitsColorDepthID, Integer8BitsColorDepthID, and RGBAColorModelID.

◆ createTransformationFromGmic()

static KoColorTransformation * createTransformationFromGmic ( const KoColorSpace * colorSpace,
int gmicSpectrum,
float gmicUnitValue )
static

Definition at line 252 of file kis_qmic_simple_convertor.cpp.

255{
256 KoColorTransformation *colorTransformation = nullptr;
257 if (colorSpace->colorModelId() != RGBAColorModelID) {
258 dbgKrita << "Unsupported color space for fast pixel transformation to "
259 "gmic pixel format"
260 << colorSpace->id();
261 return nullptr;
262 }
263
264 if (colorSpace->colorDepthId() == Float32BitsColorDepthID) {
265 if (gmicSpectrum == 3 || gmicSpectrum == 4) {
266 colorTransformation =
268 } else if (gmicSpectrum == 1) {
269 colorTransformation =
271 gmicUnitValue);
272 } else if (gmicSpectrum == 2) {
273 colorTransformation =
275 gmicUnitValue);
276 }
277 }
278#ifdef HAVE_OPENEXR
279 else if (colorSpace->colorDepthId() == Float16BitsColorDepthID) {
280 if (gmicSpectrum == 3 || gmicSpectrum == 4) {
281 colorTransformation =
283 } else if (gmicSpectrum == 1) {
284 colorTransformation =
286 gmicUnitValue);
287 } else if (gmicSpectrum == 2) {
288 colorTransformation =
290 gmicUnitValue);
291 }
292 }
293#endif
294 else if (colorSpace->colorDepthId() == Integer16BitsColorDepthID) {
295 if (gmicSpectrum == 3 || gmicSpectrum == 4) {
296 colorTransformation =
298 gmicUnitValue);
299 } else if (gmicSpectrum == 1) {
300 colorTransformation =
302 gmicUnitValue);
303 } else if (gmicSpectrum == 2) {
304 colorTransformation =
307 gmicUnitValue);
308 }
309 } else if (colorSpace->colorDepthId() == Integer8BitsColorDepthID) {
310 if (gmicSpectrum == 3 || gmicSpectrum == 4) {
311 colorTransformation =
313 gmicUnitValue);
314 } else if (gmicSpectrum == 1) {
315 colorTransformation =
317 gmicUnitValue);
318 } else if (gmicSpectrum == 2) {
319 colorTransformation =
322 gmicUnitValue);
323 }
324 } else {
325 dbgKrita << "Unsupported color space " << colorSpace->id()
326 << " for fast pixel transformation to gmic pixel format";
327 return nullptr;
328 }
329
330 return colorTransformation;
331}

References KoColorSpace::colorDepthId(), KoColorSpace::colorModelId(), dbgKrita, Float16BitsColorDepthID, Float32BitsColorDepthID, KoColorSpace::id, Integer16BitsColorDepthID, Integer8BitsColorDepthID, and RGBAColorModelID.

◆ reverseMap()

std::map< QString, QString > reverseMap ( )

Definition at line 1078 of file kis_qmic_simple_convertor.cpp.

1079{
1080 std::map<QString, QString> result{};
1081 for (const auto &pair : blendingModeMap) {
1082 result.emplace(pair.second, pair.first);
1083 }
1084 return result;
1085}
const std::map< QString, QString > blendingModeMap

References blendingModeMap.

Variable Documentation

◆ blendingModeMap

const std::map<QString, QString> blendingModeMap

Definition at line 193 of file kis_qmic_simple_convertor.cpp.

193 {
194 {"add", COMPOSITE_ADD},
195 // {"alpha", ""}, // XXX
196 {"and", COMPOSITE_AND},
197 // {"average", ""}, // XXX
198 {"blue", COMPOSITE_COPY_BLUE},
199 {"burn", COMPOSITE_BURN},
200 {"darken", COMPOSITE_DARKEN},
201 {"difference", COMPOSITE_DIFF},
202 {"divide", COMPOSITE_DIVIDE},
203 {"dodge", COMPOSITE_DODGE},
204 // {"edges", ""}, // XXX
205 {"exclusion", COMPOSITE_EXCLUSION},
206 {"freeze", COMPOSITE_FREEZE},
207 {"grainextract", COMPOSITE_GRAIN_EXTRACT},
208 {"grainmerge", COMPOSITE_GRAIN_MERGE},
209 {"green", COMPOSITE_COPY_GREEN},
210 {"hardlight", COMPOSITE_HARD_LIGHT},
211 {"hardmix", COMPOSITE_HARD_MIX},
212 {"hue", COMPOSITE_HUE},
213 {"interpolation", COMPOSITE_INTERPOLATION},
214 {"lighten", COMPOSITE_LIGHTEN},
215 {"lightness", COMPOSITE_LIGHTNESS},
216 {"linearburn", COMPOSITE_LINEAR_BURN},
217 {"linearlight", COMPOSITE_LINEAR_LIGHT},
218 {"luminance", COMPOSITE_LUMINIZE},
219 {"multiply", COMPOSITE_MULT},
220 {"negation", COMPOSITE_NEGATION},
221 {"or", COMPOSITE_OR},
222 {"overlay", COMPOSITE_OVERLAY},
223 {"pinlight", COMPOSITE_PIN_LIGHT},
224 {"red", COMPOSITE_COPY_RED},
225 {"reflect", COMPOSITE_REFLECT},
226 {"saturation", COMPOSITE_SATURATION},
227 // {"seamless", ""}, // XXX
228 // {"seamless_mixed", ""}, // XXX
229 {"screen", COMPOSITE_SCREEN},
230 // {"shapeareamax", ""}, // XXX
231 // {"shapeareamax0", ""}, // XXX
232 // {"shapeareamin", ""}, // XXX
233 // {"shapeareamin0", ""}, // XXX
234 // {"shapeaverage", ""}, // XXX
235 // {"shapeaverage0", ""}, // XXX
236 // {"shapemedian", ""}, // XXX
237 // {"shapemedian0", ""}, // XXX
238 // {"shapemin", ""}, // XXX
239 // {"shapemin0", ""}, // XXX
240 // {"shapemax", ""}, // XXX
241 // {"shapemax0", ""}, // XXX
242 // {"softburn", ""}, // XXX
243 // {"softdodge", ""}, // XXX
244 {"softlight", COMPOSITE_SOFT_LIGHT_SVG}, // XXX Is this correct?
245 // {"stamp", ""}, // XXX
246 {"subtract", COMPOSITE_SUBTRACT},
247 {"value", COMPOSITE_VALUE},
248 {"vividlight", COMPOSITE_VIVID_LIGHT},
249 {"xor", COMPOSITE_XOR}};
const QString COMPOSITE_DARKEN
const QString COMPOSITE_NEGATION
const QString COMPOSITE_OVERLAY
const QString COMPOSITE_DIVIDE
const QString COMPOSITE_LIGHTNESS
const QString COMPOSITE_DODGE
const QString COMPOSITE_SOFT_LIGHT_SVG
const QString COMPOSITE_ADD
const QString COMPOSITE_LIGHTEN
const QString COMPOSITE_COPY_RED
const QString COMPOSITE_LINEAR_BURN
const QString COMPOSITE_FREEZE
const QString COMPOSITE_VALUE
const QString COMPOSITE_GRAIN_MERGE
const QString COMPOSITE_MULT
const QString COMPOSITE_REFLECT
const QString COMPOSITE_OR
const QString COMPOSITE_SATURATION
const QString COMPOSITE_LINEAR_LIGHT
const QString COMPOSITE_COPY_GREEN
const QString COMPOSITE_HARD_LIGHT
const QString COMPOSITE_INTERPOLATION
const QString COMPOSITE_COPY_BLUE
const QString COMPOSITE_SCREEN
const QString COMPOSITE_PIN_LIGHT
const QString COMPOSITE_DIFF
const QString COMPOSITE_HARD_MIX
const QString COMPOSITE_HUE
const QString COMPOSITE_SUBTRACT
const QString COMPOSITE_BURN
const QString COMPOSITE_EXCLUSION
const QString COMPOSITE_AND
const QString COMPOSITE_GRAIN_EXTRACT
const QString COMPOSITE_XOR
const QString COMPOSITE_VIVID_LIGHT
const QString COMPOSITE_LUMINIZE