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

#include <kis_common_colors_recalculation_runner.h>

+ Inheritance diagram for KisCommonColorsRecalculationRunner:

Public Member Functions

QList< KoColorextractColors ()
 
QList< QRgbgetColors ()
 
 KisCommonColorsRecalculationRunner (QImage data, int numberOfColors, KisCommonColors *parentObj)
 
void run () override
 

Private Attributes

KisCommonColorsm_commonColors
 
QImage m_imageData
 
int m_numColors
 

Detailed Description

Definition at line 16 of file kis_common_colors_recalculation_runner.h.

Constructor & Destructor Documentation

◆ KisCommonColorsRecalculationRunner()

KisCommonColorsRecalculationRunner::KisCommonColorsRecalculationRunner ( QImage data,
int numberOfColors,
KisCommonColors * parentObj )
inline

Member Function Documentation

◆ extractColors()

QList< KoColor > KisCommonColorsRecalculationRunner::extractColors ( )

Definition at line 135 of file kis_common_colors_recalculation_runner.cpp.

136{
137 QList<QRgb> colors = getColors();
138
139 VBox startBox(colors);
140 QList<VBox> boxes;
141 boxes.append(startBox);
142
143 while (boxes.size()<m_numColors*3/5 && colors.size()>m_numColors*3/5) {
144 int biggestBox=-1;
145 int biggestBoxPopulation=-1;
146
147 for(int i=0; i<boxes.size(); i++) {
148 if(boxes.at(i).population()>biggestBoxPopulation &&
149 boxes.at(i).axisSize(boxes.at(i).biggestAxis())>=3) {
150 biggestBox=i;
151 biggestBoxPopulation=boxes.at(i).population();
152 }
153 }
154
155 if(biggestBox==-1 || boxes[biggestBox].population()<=3)
156 break;
157 VBox newBox = boxes[biggestBox].divide();
158 boxes.append(newBox);
159 }
160
161
162 while (boxes.size()<m_numColors && colors.size()>m_numColors) {
163 int biggestBox=-1;
164 int biggestBoxAxisSize=-1;
165
166 for(int i=0; i<boxes.size(); i++) {
167 if(boxes.at(i).axisSize(boxes.at(i).biggestAxis())>biggestBoxAxisSize &&
168 boxes.at(i).axisSize(boxes.at(i).biggestAxis())>=3) {
169 biggestBox=i;
170 biggestBoxAxisSize=boxes.at(i).axisSize(boxes.at(i).biggestAxis());
171 }
172 }
173
174 if(biggestBox==-1 || boxes[biggestBox].population()<=3)
175 break;
176 VBox newBox = boxes[biggestBox].divide();
177 boxes.append(newBox);
178 }
179
180 const KoColorSpace* colorSpace = KoColorSpaceRegistry::instance()->rgb8();
181 QList<KoColor> colorList;
182 for(int i=0; i<boxes.size(); i++) {
183 if(boxes.at(i).population()>=1) {
184 colorList.append(KoColor(QColor(boxes.at(i).mean()), colorSpace));
185 }
186 }
187
188 return colorList;
189}
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())

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

◆ getColors()

QList< QRgb > KisCommonColorsRecalculationRunner::getColors ( )

Definition at line 191 of file kis_common_colors_recalculation_runner.cpp.

192{
193 int width = m_imageData.width();
194 int height = m_imageData.height();
195
196 QImage tmpImage;
197 int pixelCount = height*width;
198 if(pixelCount> (1<<16)) {
199 qreal factor = sqrt((1<<16)/(qreal) pixelCount);
200 tmpImage = m_imageData.scaledToWidth(width*factor);
201 }
202 else {
203 tmpImage = m_imageData;
204 }
205 width=tmpImage.width();
206 height=tmpImage.height();
207
208 QSet<QRgb> colorList;
209
210 for (int i=0; i<width; i++) {
211 for (int j=0; j<height; j++) {
212 colorList.insert(tmpImage.pixel(i, j)|qRgba(0,0,0,255));
213 }
214 }
215 return QList<QRgb>(colorList.begin(), colorList.end());
216}

References m_imageData.

◆ run()

void KisCommonColorsRecalculationRunner::run ( )
override

Member Data Documentation

◆ m_commonColors

KisCommonColors* KisCommonColorsRecalculationRunner::m_commonColors
private

Definition at line 32 of file kis_common_colors_recalculation_runner.h.

◆ m_imageData

QImage KisCommonColorsRecalculationRunner::m_imageData
private

Definition at line 30 of file kis_common_colors_recalculation_runner.h.

◆ m_numColors

int KisCommonColorsRecalculationRunner::m_numColors
private

Definition at line 31 of file kis_common_colors_recalculation_runner.h.


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