Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_acs_pixel_cache_renderer.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_ACS_PIXEL_CACHE_RENDERER_H
8#define __KIS_ACS_PIXEL_CACHE_RENDERER_H
9
10#include "KoColorSpace.h"
11#include "kis_paint_device.h"
12#include "kis_iterator_ng.h"
14
15
16namespace Acs {
17
19 public:
35 template <class Sampler>
36 static void render(Sampler *sampler,
37 const KisDisplayColorConverter *converter,
38 const QRect &sampleRect,
39 KisPaintDeviceSP &realPixelCache,
40 QImage &pixelCache,
41 QPoint &pixelCacheOffset,
42 qreal devicePixelRatioF)
43 {
44 const KoColorSpace *cacheColorSpace = converter->paintingColorSpace();
45 const int pixelSize = cacheColorSpace->pixelSize();
46
47 if (!realPixelCache || realPixelCache->colorSpace() != cacheColorSpace) {
48 realPixelCache = new KisPaintDevice(cacheColorSpace);
49 }
50
51 KoColor color;
52
53 QRect sampleRectHighDPI = QRect(sampleRect.topLeft(), sampleRect.size()*devicePixelRatioF);
54 KisSequentialIterator it(realPixelCache, sampleRectHighDPI);
55
56 while (it.nextPixel()) {
57 color = sampler->colorAt(it.x()/devicePixelRatioF, it.y()/devicePixelRatioF);
58 memcpy(it.rawData(), color.data(), pixelSize);
59 }
60
61
62 // NOTE: toQImage() function of the converter copies exactBounds() only!
63 pixelCache = converter->toQImage(realPixelCache);
64 pixelCache.setDevicePixelRatio(devicePixelRatioF);
65 pixelCacheOffset = realPixelCache->exactBounds().topLeft()/devicePixelRatioF - sampleRect.topLeft();
66 }
67 };
68}
69
70#endif /* __KIS_ACS_PIXEL_CACHE_RENDERER_H */
static void render(Sampler *sampler, const KisDisplayColorConverter *converter, const QRect &sampleRect, KisPaintDeviceSP &realPixelCache, QImage &pixelCache, QPoint &pixelCacheOffset, qreal devicePixelRatioF)
const KoColorSpace * paintingColorSpace() const
QImage toQImage(KisPaintDeviceSP srcDevice, bool proofPaintColors=false) const
QRect exactBounds() const
const KoColorSpace * colorSpace() const
ALWAYS_INLINE quint8 * rawData()
ALWAYS_INLINE int x() const
ALWAYS_INLINE int y() const
virtual quint32 pixelSize() const =0
quint8 * data()
Definition KoColor.h:144