File indexing completed on 2024-05-12 15:56:12
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_QIMAGE_PYRAMID_H 0008 #define __KIS_QIMAGE_PYRAMID_H 0009 0010 #include <QImage> 0011 #include <QVector> 0012 #include <kis_dab_shape.h> 0013 #include <kritabrush_export.h> 0014 0015 0016 class BRUSH_EXPORT KisQImagePyramid 0017 { 0018 public: 0019 KisQImagePyramid() = default; 0020 KisQImagePyramid(const QImage &baseImage, bool useSmoothingForEnlarging = true); 0021 ~KisQImagePyramid(); 0022 0023 static QSize imageSize(const QSize &originalSize, 0024 KisDabShape const&, 0025 qreal subPixelX, qreal subPixelY); 0026 0027 static QSizeF characteristicSize(const QSize &originalSize, KisDabShape const&); 0028 0029 QImage createImage(KisDabShape const&, 0030 qreal subPixelX, qreal subPixelY) const; 0031 0032 QImage getClosest(QTransform transform, qreal *scale) const; 0033 0034 QImage getClosestWithoutWorkaroundBorder(QTransform transform, qreal *scale) const; 0035 0036 private: 0037 friend class KisGbrBrushTest; 0038 int findNearestLevel(qreal scale, qreal *baseScale) const; 0039 void appendPyramidLevel(const QImage &image); 0040 0041 static void calculateParams(KisDabShape const& shape, 0042 qreal subPixelX, qreal subPixelY, 0043 const QSize &originalSize, 0044 QTransform *outputTransform, QSize *outputSize); 0045 0046 static void calculateParams(KisDabShape shape, 0047 qreal subPixelX, qreal subPixelY, 0048 const QSize &originalSize, 0049 qreal baseScale, const QSize &baseSize, 0050 QTransform *outputTransform, QSize *outputSize); 0051 0052 private: 0053 QSize m_originalSize; 0054 qreal m_baseScale {0.0}; 0055 0056 struct PyramidLevel { 0057 PyramidLevel() {} 0058 PyramidLevel(QImage _image, QSize _size) : image(_image), size(_size) {} 0059 0060 QImage image; 0061 QSize size; 0062 }; 0063 0064 QVector<PyramidLevel> m_levels; 0065 }; 0066 0067 #endif /* __KIS_QIMAGE_PYRAMID_H */