Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_cross_device_color_sampler.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_CROSS_DEVICE_COLOR_SAMPLER_H
8#define __KIS_CROSS_DEVICE_COLOR_SAMPLER_H
9
10#include "KoColorSpace.h"
12
13
15 typedef qreal coord_type;
18 return dev->createRandomSubAccessor();
19 }
20
21 template <bool useOldData>
22 static inline void sampleData(accessor_type accessor, quint8 *data, const KoColorSpace*) {
23 if (useOldData) {
24 accessor->sampledOldRawData(data);
25 } else {
26 accessor->sampledRawData(data);
27 }
28 }
29};
30
32 typedef int coord_type;
35 return dev->createRandomConstAccessorNG();
36 }
37
38 template <bool useOldData>
39 static inline void sampleData(accessor_type accessor, quint8 *data, const KoColorSpace *cs) {
40 if (useOldData) {
41 memcpy(data, accessor->oldRawData(), cs->pixelSize());
42 } else {
43 memcpy(data, accessor->rawDataConst(), cs->pixelSize());
44 }
45 }
46};
47
61template <class Traits>
63{
64public:
68
72
74 init(src, &dst);
75 }
76
80
81 inline void sampleColor(typename Traits::coord_type x,
82 typename Traits::coord_type y,
83 quint8 *dst) {
84 sampleColorImpl<false>(x, y, dst);
85 }
86
87 inline void sampleOldColor(typename Traits::coord_type x,
88 typename Traits::coord_type y,
89 quint8 *dst) {
90 sampleColorImpl<true>(x, y, dst);
91 }
92
93private:
94 template <typename T>
95 inline void init(KisPaintDeviceSP src, T dst) {
96 m_srcCS = src->colorSpace();
97 m_dstCS = dst->colorSpace();
98 m_data = new quint8[m_srcCS->pixelSize()];
99
100 m_accessor = Traits::createAccessor(src);
101 }
102
103 template <bool useOldData>
104 inline void sampleColorImpl(typename Traits::coord_type x,
105 typename Traits::coord_type y,
106 quint8 *dst) {
107 m_accessor->moveTo(x, y);
108
109 Traits::template sampleData<useOldData>(m_accessor, m_data, m_srcCS);
110
114 }
115
116private:
119 typename Traits::accessor_type m_accessor;
120 quint8 *m_data;
121};
122
125
126#endif /* __KIS_CROSS_DEVICE_COLOR_SAMPLER_H */
virtual const quint8 * oldRawData() const =0
virtual const quint8 * rawDataConst() const =0
void sampleOldColor(typename Traits::coord_type x, typename Traits::coord_type y, quint8 *dst)
KisCrossDeviceColorSamplerImpl(KisPaintDeviceSP src, KisFixedPaintDeviceSP dst)
void sampleColor(typename Traits::coord_type x, typename Traits::coord_type y, quint8 *dst)
KisCrossDeviceColorSamplerImpl(KisPaintDeviceSP src, const KoColor &dst)
void init(KisPaintDeviceSP src, T dst)
KisCrossDeviceColorSamplerImpl(KisPaintDeviceSP src, KisPaintDeviceSP dst)
void sampleColorImpl(typename Traits::coord_type x, typename Traits::coord_type y, quint8 *dst)
KisRandomConstAccessorSP createRandomConstAccessorNG() const
KisRandomSubAccessorSP createRandomSubAccessor() const
void sampledOldRawData(quint8 *dst)
virtual quint32 pixelSize() const =0
virtual bool convertPixelsTo(const quint8 *src, quint8 *dst, const KoColorSpace *dstColorSpace, quint32 numPixels, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
KisCrossDeviceColorSamplerImpl< SamplerTraitReal > KisCrossDeviceColorSampler
KisCrossDeviceColorSamplerImpl< SamplerTraitInt > KisCrossDeviceColorSamplerInt
static void sampleData(accessor_type accessor, quint8 *data, const KoColorSpace *cs)
static accessor_type createAccessor(KisPaintDeviceSP dev)
KisRandomConstAccessorSP accessor_type
static accessor_type createAccessor(KisPaintDeviceSP dev)
static void sampleData(accessor_type accessor, quint8 *data, const KoColorSpace *)
KisRandomSubAccessorSP accessor_type