29 explicit Color(
QRgb rgb) :
r(qRed(rgb)),
g(qGreen(rgb)),
b(qBlue(rgb)) {}
48 for(
int i=0; i<rgbList.size(); i++) {
49 colorList.append(
Color(rgbList.at(i)));
63 unsigned char divpos =
divPos(axis);
65 for(
int i=
m_colors.size()-1; i>=0; i--) {
69 newVBoxColors.append(c);
73 return VBox(newVBoxColors);
81 for(
int i=0;i<
m_colors.size(); i++) {
89 return qRgb(r/size, g/size, b/size);
94 unsigned char valMin = 255;
95 unsigned char valMax = 0;
96 for(
int i=0; i<
m_colors.size(); i++) {
102 return valMax-valMin;
110 if(sR>sG && sR>sB)
return RedAxis;
129 for(
int i=0;i<
m_colors.size(); i++) {
141 : m_numColors(numberOfColors)
142 , m_commonColors(colorStore)
160 VBox startBox(colors);
162 boxes.append(startBox);
166 int biggestBoxPopulation=-1;
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) {
172 biggestBoxPopulation=boxes.at(i).population();
176 if(biggestBox==-1 || boxes[biggestBox].population()<=3)
178 VBox newBox = boxes[biggestBox].divide();
179 boxes.append(newBox);
185 int biggestBoxAxisSize=-1;
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) {
191 biggestBoxAxisSize=boxes.at(i).axisSize(boxes.at(i).biggestAxis());
195 if(biggestBox==-1 || boxes[biggestBox].population()<=3)
197 VBox newBox = boxes[biggestBox].divide();
198 boxes.append(newBox);
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));
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);
225 width=tmpImage.width();
226 height=tmpImage.height();
228 QSet<QRgb> colorList;
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));
235 return QList<QRgb>(colorList.begin(), colorList.end());
unsigned char operator[](ColorAxis i) const
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())
ColorAxis biggestAxis() const
VBox(QList< QRgb > rgbList)
unsigned char divPos(ColorAxis axis) const
unsigned char axisSize(ColorAxis axis) const
QList< QRgb > getColors()
QSharedPointer< QVector< KoColor > > m_commonColors
WGCommonColorsCalculationRunner(KisImageSP image, int numberOfColors, QSharedPointer< QVector< KoColor > > colorStore)
int size(const Forest< T > &forest)
constexpr std::enable_if< sizeof...(values)==0, size_t >::type max()
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())