Krita Source Code Documentation
Loading...
Searching...
No Matches
WGCommonColorsCalculationRunner Class Reference

#include <WGCommonColorsCalculationRunner.h>

+ Inheritance diagram for WGCommonColorsCalculationRunner:

Signals

void sigDone ()
 

Public Member Functions

void extractColors ()
 
QList< QRgbgetColors ()
 
void run () override
 
 WGCommonColorsCalculationRunner (KisImageSP image, int numberOfColors, QSharedPointer< QVector< KoColor > > colorStore)
 

Private Attributes

QSharedPointer< QVector< KoColor > > m_commonColors
 
QImage m_imageData
 
int m_numColors
 

Detailed Description

Definition at line 20 of file WGCommonColorsCalculationRunner.h.

Constructor & Destructor Documentation

◆ WGCommonColorsCalculationRunner()

WGCommonColorsCalculationRunner::WGCommonColorsCalculationRunner ( KisImageSP image,
int numberOfColors,
QSharedPointer< QVector< KoColor > > colorStore )

Definition at line 140 of file WGCommonColorsCalculationRunner.cpp.

141 : m_numColors(numberOfColors)
142 , m_commonColors(colorStore)
143{
144 // TODO: can this be done in the worker thread too?
145 KisPaintDeviceSP device = image->projection();
147
148}
KisPaintDeviceSP projection() const
QRect bounds() const override
QImage createThumbnail(qint32 maxw, qint32 maxh, QRect rect, qreal oversample=1, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags())
QSharedPointer< QVector< KoColor > > m_commonColors

References KisImage::bounds(), KisPaintDevice::createThumbnail(), KoColorConversionTransformation::internalConversionFlags(), KoColorConversionTransformation::internalRenderingIntent(), m_imageData, and KisImage::projection().

Member Function Documentation

◆ extractColors()

void WGCommonColorsCalculationRunner::extractColors ( )

Definition at line 156 of file WGCommonColorsCalculationRunner.cpp.

157{
158 QList<QRgb> colors = getColors();
159
160 VBox startBox(colors);
161 QList<VBox> boxes;
162 boxes.append(startBox);
163
164 while (boxes.size()<m_numColors*3/5 && colors.size()>m_numColors*3/5) {
165 int biggestBox=-1;
166 int biggestBoxPopulation=-1;
167
168 for(int i=0; i<boxes.size(); i++) {
169 if(boxes.at(i).population()>biggestBoxPopulation &&
170 boxes.at(i).axisSize(boxes.at(i).biggestAxis())>=3) {
171 biggestBox=i;
172 biggestBoxPopulation=boxes.at(i).population();
173 }
174 }
175
176 if(biggestBox==-1 || boxes[biggestBox].population()<=3)
177 break;
178 VBox newBox = boxes[biggestBox].divide();
179 boxes.append(newBox);
180 }
181
182
183 while (boxes.size()<m_numColors && colors.size()>m_numColors) {
184 int biggestBox=-1;
185 int biggestBoxAxisSize=-1;
186
187 for(int i=0; i<boxes.size(); i++) {
188 if(boxes.at(i).axisSize(boxes.at(i).biggestAxis())>biggestBoxAxisSize &&
189 boxes.at(i).axisSize(boxes.at(i).biggestAxis())>=3) {
190 biggestBox=i;
191 biggestBoxAxisSize=boxes.at(i).axisSize(boxes.at(i).biggestAxis());
192 }
193 }
194
195 if(biggestBox==-1 || boxes[biggestBox].population()<=3)
196 break;
197 VBox newBox = boxes[biggestBox].divide();
198 boxes.append(newBox);
199 }
200
201 const KoColorSpace* colorSpace = KoColorSpaceRegistry::instance()->rgb8();
202 QVector<KoColor> &colorList = *m_commonColors;
203
204 for(int i=0; i<boxes.size(); i++) {
205 if(boxes.at(i).population()>=1) {
206 colorList.append(KoColor(QColor(boxes.at(i).mean()), colorSpace));
207 }
208 }
209}
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())

References getColors(), KoColorSpaceRegistry::instance(), m_commonColors, m_numColors, and KoColorSpaceRegistry::rgb8().

◆ getColors()

QList< QRgb > WGCommonColorsCalculationRunner::getColors ( )

Definition at line 211 of file WGCommonColorsCalculationRunner.cpp.

212{
213 int width = m_imageData.width();
214 int height = m_imageData.height();
215
216 QImage tmpImage;
217 int pixelCount = height*width;
218 if(pixelCount> (1<<16)) {
219 qreal factor = sqrt((1<<16)/(qreal) pixelCount);
220 tmpImage = m_imageData.scaledToWidth(width*factor);
221 }
222 else {
223 tmpImage = m_imageData;
224 }
225 width=tmpImage.width();
226 height=tmpImage.height();
227
228 QSet<QRgb> colorList;
229
230 for (int i=0; i<width; i++) {
231 for (int j=0; j<height; j++) {
232 colorList.insert(tmpImage.pixel(i, j)|qRgba(0,0,0,255));
233 }
234 }
235 return QList<QRgb>(colorList.begin(), colorList.end());
236}

References m_imageData.

◆ run()

void WGCommonColorsCalculationRunner::run ( )
override

◆ sigDone

void WGCommonColorsCalculationRunner::sigDone ( )
signal

Member Data Documentation

◆ m_commonColors

QSharedPointer<QVector<KoColor> > WGCommonColorsCalculationRunner::m_commonColors
private

Definition at line 39 of file WGCommonColorsCalculationRunner.h.

◆ m_imageData

QImage WGCommonColorsCalculationRunner::m_imageData
private

Definition at line 37 of file WGCommonColorsCalculationRunner.h.

◆ m_numColors

int WGCommonColorsCalculationRunner::m_numColors
private

Definition at line 38 of file WGCommonColorsCalculationRunner.h.


The documentation for this class was generated from the following files: