00106 {
00107
00108
if(
status)
00109 {
00110 QString statusMessage = qApp->translate(
"enhanceImageContrast",
"Enhancing Contrast:" );
00111
status->
showProgressBar( statusMessage, 100 );
00112 qApp->processEvents();
00113 }
00114
00115
00116
const int updateIncrement = (
int) ( 0.01 *
editedImage->width() *
editedImage->height() );
00117
int newProgress = 0;
00118
00122
00123
00124
int grayVals[256];
00125
int i=0;
00126
for(i=0; i<256; i++) { grayVals[i] = 0; }
00127
00128
00129
int numPixels =
editedImage->width()*
editedImage->height();
00130 QRgb* rgb;
00131
double grayValue;
00132 uchar* scanLine;
00133
int x, y;
00134
for( y=0; y<
editedImage->height(); y++)
00135 {
00136
00137 scanLine =
editedImage->scanLine(y);
00138
for( x=0; x<
editedImage->width(); x++)
00139 {
00140 rgb = ((QRgb*)scanLine+x);
00141 grayValue =
RGBtoL(rgb);
00142 grayVals[(
int)grayValue]++;
00143 }
00144 }
00145
00146
00147
00148
int sum=0;
00149
double indexLow, indexHigh;
00150 indexLow = -1.0; indexHigh = -1.0;
00151
for(i=0; i<256; i++)
00152 {
00153 sum+=grayVals[i];
00154
00155
00156
if(indexLow < 0 &&
00157 sum >= 0.01*numPixels)
00158 {
00159 indexLow = ((
double)i)/255.0;
00160 }
00161
00162
00163
if(indexHigh < 0 &&
00164 sum >= 0.99*numPixels)
00165 {
00166 indexHigh = ((
double)i)/255.0;
00167 }
00168 }
00169
00170
00171
if(indexHigh > indexLow)
00172 {
00173
00174
for( y=0; y<
editedImage->height(); y++)
00175 {
00176
00177 scanLine =
editedImage->scanLine(y);
00178
for( x=0; x<
editedImage->width(); x++)
00179 {
00180
00181 rgb = ((QRgb*)scanLine+x);
00182
double r = ((
double)qRed(*rgb) )/255.0;
00183
double g = ((
double)qGreen(*rgb) )/255.0;
00184
double b = ((
double)qBlue(*rgb) )/255.0;
00185
00186
00187
double h,s,v;
00188
RGBtoHSV(r,g,b,&h,&s,&v);
00189
00190
00191 v = (v-indexLow)/(indexHigh-indexLow);
00192
00193
00194
HSVtoRGB( &r,&g,&b, h,s,v);
00195
int rp = (
int) QMIN( QMAX((r*255), 0), 255 );
00196
int gp = (
int) QMIN( QMAX((g*255), 0), 255 );
00197
int bp = (
int) QMIN( QMAX((b*255), 0), 255 );
00198
00199
00200 *rgb = qRgb(rp,gp,bp);
00201
00202
00203
if(
status)
00204 {
00205
newProgress++;
00206
if(
newProgress >=
updateIncrement)
00207 {
00208
newProgress = 0;
00209
status->
incrementProgress();
00210 qApp->processEvents();
00211 }
00212 }
00213
00214 }
00215 }
00216 }
00217
00218
00219
if(
status)
00220 {
00221
status->
setStatus(
"" );
00222 qApp->processEvents();
00223 }
00224 }