98 if( editedImage->depth() < 32 )
101 editedImage =
new QImage( tmp->convertDepth( 32, Qt::AutoColor ) );
102 delete tmp; tmp=NULL;
106 QString statusMessage = qApp->translate(
"improveColorBalance",
"Enhancing Color Balance:" );
108 qApp->processEvents();
111 const int updateIncrement = (int) ( 0.01 * editedImage->width() * editedImage->height() );
127 int numPixels = editedImage->width()*editedImage->height();
131 for( y=0; y<editedImage->height(); y++)
134 scanLine = editedImage->scanLine(y);
135 for( x=0; x<editedImage->width(); x++)
137 rgb = ((QRgb*)scanLine+x);
138 redVals[qRed(*rgb)]++;
139 greenVals[qGreen(*rgb)]++;
140 blueVals[qBlue(*rgb)]++;
149 int indexLowR, indexHighR;
150 int indexLowG, indexHighG;
151 int indexLowB, indexHighB;
152 indexLowR = -1; indexHighR = -1;
153 indexLowG = -1; indexHighG = -1;
154 indexLowB = -1; indexHighB = -1;
162 if(indexLowR < 0 && sumR >= 0.01*numPixels)
164 if(indexLowG < 0 && sumG >= 0.01*numPixels)
166 if(indexLowB < 0 && sumB >= 0.01*numPixels)
170 if(indexHighR < 0 && sumR >= 0.99*numPixels)
172 if(indexHighG < 0 && sumG >= 0.99*numPixels)
174 if(indexHighB < 0 && sumB >= 0.99*numPixels)
179 for( y=0; y<editedImage->height(); y++)
182 scanLine = editedImage->scanLine(y);
183 for( x=0; x<editedImage->width(); x++)
186 rgb = ((QRgb*)scanLine+x);
187 double r = ((double)qRed(*rgb) );
188 double g = ((double)qGreen(*rgb) );
189 double b = ((double)qBlue(*rgb) );
191 if(indexHighR != indexLowR) { r = (255*(r-indexLowR))/(indexHighR-indexLowR); }
192 if(indexHighG != indexLowG) { g = (255*(g-indexLowG))/(indexHighG-indexLowG); }
193 if(indexHighB != indexLowB) { b = (255*(b-indexLowB))/(indexHighB-indexLowB); }
195 int rp = (int)
MIN(
MAX(r, 0), 255 );
196 int gp = (int)
MIN(
MAX(g, 0), 255 );
197 int bp = (int)
MIN(
MAX(b, 0), 255 );
200 *rgb = qRgb(rp,gp,bp);
204 if(newProgress >= updateIncrement)
208 qApp->processEvents();
216 qApp->processEvents();