Krita Source Code Documentation
Loading...
Searching...
No Matches
KisChannelsThumbnailsStrokeStrategy.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7
9
12#include "KoColorSpace.h"
14
16 qRegisterMetaType<QVector<QImage>>("QVector<QImage>");
17#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
18 QMetaType::registerEqualsComparator<QVector<QImage>>();
19#endif
20}
21
23{
24 const KoColorSpace* cs = device->colorSpace();
25 const int channelCount = cs->channelCount();
26 const QSize thumbnailSize = rect.size();
27 const bool invert = (cs->colorModelId() == CMYKAColorModelID);
28
29 QVector<QImage> thumbnails;
30 thumbnails.reserve(channelCount);
31 for (int i = 0; i < channelCount; i++) {
32 thumbnails.push_back(QImage(thumbnailSize, QImage::Format_Grayscale8));
33 }
34
35 KisSequentialConstIterator it(device, QRect(0, 0, thumbnailSize.width(), thumbnailSize.height()));
36
37 for (int y = 0; y < thumbnailSize.height(); y++) {
38 for (int x = 0; x < thumbnailSize.width(); x++) {
39 it.nextPixel();
40 const quint8* pixel = it.rawDataConst();
41 for (int chan = 0; chan < channelCount; ++chan) {
42 QImage &img = thumbnails[chan];
43 if (invert) {
44 *(img.scanLine(y) + x) = 255 - cs->scaleToU8(pixel, chan);
45 }
46 else {
47 *(img.scanLine(y) + x) = cs->scaleToU8(pixel, chan);
48 }
49 }
50 }
51 }
52
53 Q_EMIT thumbnailsUpdated(thumbnails, cs);
54}
const KoID CMYKAColorModelID("CMYKA", ki18n("CMYK/Alpha"))
void thumbnailsUpdated(const QVector< QImage > &channels, const KoColorSpace *cs)
void reportThumbnailGenerationCompleted(KisPaintDeviceSP device, const QRect &rect) override
const KoColorSpace * colorSpace() const
ALWAYS_INLINE const quint8 * rawDataConst() const
virtual quint8 scaleToU8(const quint8 *srcPixel, qint32 channelPos) const =0
virtual KoID colorModelId() const =0
virtual quint32 channelCount() const =0