Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_image_pyramid.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_IMAGE_PYRAMID
8#define __KIS_IMAGE_PYRAMID
9
10#include <QImage>
11#include <QVector>
12#include <QThreadStorage>
13
14#include <KoColorSpace.h>
15#include <kis_image.h>
16#include <kis_paint_device.h>
18
19
21{
22 Q_OBJECT
23
24public:
25 KisImagePyramid(qint32 pyramidHeight);
26 ~KisImagePyramid() override;
27
28 void setImage(KisImageWSP newImage) override;
29 void setImageSize(qint32 w, qint32 h) override;
30 void setMonitorProfile(const KoColorProfile* monitorProfile, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) override;
31 void setChannelFlags(const QBitArray &channelFlags) override;
32 void setDisplayFilter(QSharedPointer<KisDisplayFilter> displayFilter) override;
33 void updateCache(const QRect &dirtyImageRect) override;
34 void recalculateCache(KisPPUpdateInfoSP info) override;
35
37 void drawFromOriginalImage(QPainter& gc, KisPPUpdateInfoSP info) override;
38
43 QImage convertToQImage(qreal scale,
44 const QRect& unscaledRect,
45 enum Qt::TransformationMode transformMode);
46
47 QImage convertToQImage(qreal scale,
48 qint32 unscaledX,
49 qint32 unscaledY,
50 qint32 unscaledWidth,
51 qint32 unscaledHeight);
52
57 void drawImage(qreal scale,
58 QPainter& gc,
59 const QPoint& topLeftScaled,
60 const QRect& unscaledSourceRect);
61
62 void alignSourceRect(QRect& rect, qreal scale) override;
63
64private:
65
66 void retrieveImageData(const QRect &rect);
67 void rebuildPyramid();
68 void clearPyramid();
69
75 QRect downsampleByFactor2(const QRect& srcRect,
77
83 void downsamplePixels(const quint8 *srcRow0, const quint8 *srcRow1,
84 quint8 *dstRow, qint32 numSrcPixels);
85
91 int findFirstGoodPlaneIndex(qreal scale, QSize originalSize);
92
93
97 QImage convertToQImageFast(KisPaintDeviceSP paintDevice,
98 const QRect& unscaledRect);
99
100private Q_SLOTS:
101
102 void configChanged();
103
104private:
105
108
111
113
115 KoColorConversionTransformation::ConversionFlags m_conversionFlags { KoColorConversionTransformation::Empty };
116
117
121 qint32 m_pyramidHeight {0};
122
123 bool m_useOcio {false};
124
125 QBitArray m_channelFlags;
129
130};
131
132#endif /* __KIS_IMAGE_PYRAMID */
QImage convertToQImageFast(KisPaintDeviceSP paintDevice, const QRect &unscaledRect)
KisImagePyramid(qint32 pyramidHeight)
void downsamplePixels(const quint8 *srcRow0, const quint8 *srcRow1, quint8 *dstRow, qint32 numSrcPixels)
QRect downsampleByFactor2(const QRect &srcRect, KisPaintDevice *src, KisPaintDevice *dst)
void updateCache(const QRect &dirtyImageRect) override
int findFirstGoodPlaneIndex(qreal scale, QSize originalSize)
void setDisplayFilter(QSharedPointer< KisDisplayFilter > displayFilter) override
void drawImage(qreal scale, QPainter &gc, const QPoint &topLeftScaled, const QRect &unscaledSourceRect)
KisImageWSP m_originalImage
QVector< KisPaintDeviceSP > m_pyramid
QSharedPointer< KisDisplayFilter > m_displayFilter
void setImage(KisImageWSP newImage) override
void alignSourceRect(QRect &rect, qreal scale) override
void setImageSize(qint32 w, qint32 h) override
void drawFromOriginalImage(QPainter &gc, KisPPUpdateInfoSP info) override
KoColorConversionTransformation::Intent m_renderingIntent
QImage convertToQImage(qreal scale, qint32 unscaledX, qint32 unscaledY, qint32 unscaledWidth, qint32 unscaledHeight)
QImage convertToQImage(qreal scale, const QRect &unscaledRect, enum Qt::TransformationMode transformMode)
~KisImagePyramid() override
void retrieveImageData(const QRect &rect)
KoColorConversionTransformation::ConversionFlags m_conversionFlags
void setMonitorProfile(const KoColorProfile *monitorProfile, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) override
const KoColorSpace * m_monitorColorSpace
void setChannelFlags(const QBitArray &channelFlags) override
KisImagePatch getNearestPatch(KisPPUpdateInfoSP info) override
void recalculateCache(KisPPUpdateInfoSP info) override
const KoColorProfile * m_monitorProfile