109 QImage originalImage( filename );
112 if( originalImage.depth() < 32 ) { originalImage = originalImage.convertDepth( 32, Qt::AutoColor ); }
115 bool useBusyIndicators =
false;
117 if( options != NULL && options->
getStatus() != NULL )
119 useBusyIndicators =
true;
124 if(useBusyIndicators)
126 QString statusMessage = qApp->translate(
"oilPaintingEffect",
"Applying Oil Painting Effect:" );
128 qApp->processEvents();
132 const int updateIncrement = (int) ( 0.01 * originalImage.width() * originalImage.height() );
139 if( editedImage->depth() < 32 )
142 editedImage =
new QImage( tmp->convertDepth( 32, Qt::AutoColor ) );
143 delete tmp; tmp=NULL;
147 double minDimen = (double)
MIN( editedImage->width(), editedImage->height() );
148 const int RADIUS = (int)
MAX( 2, (sqrt(minDimen)/4) );
151 int originalImageX, originalImageY;
152 int editedImageX, editedImageY;
153 int clampedX, clampedY;
154 int trailingEdgeY, leadingEdgeY;
158 uchar* trailingScanLine;
159 uchar* leadingScanLine;
162 for( editedImageX=0; editedImageX < editedImage->width(); editedImageX++)
169 for(originalImageY = 0 - 1 - RADIUS;
170 originalImageY <= 0 - 1 + RADIUS;
173 clampedY =
MAX(
MIN( originalImageY, originalImage.height() - 1 ), 0 );
174 scanLine = originalImage.scanLine( clampedY );
176 for(originalImageX = editedImageX - RADIUS;
177 originalImageX <= editedImageX + RADIUS;
180 clampedX =
MAX(
MIN( originalImageX, originalImage.width() - 1 ), 0 );
183 rgb = ((QRgb*)scanLine+clampedX);
194 for( editedImageY=0; editedImageY < editedImage->height(); editedImageY++)
196 trailingEdgeY =
MAX(
MIN( editedImageY-1-RADIUS, originalImage.height() - 1 ), 0 );
197 leadingEdgeY =
MAX(
MIN( editedImageY+RADIUS, originalImage.height() - 1 ), 0 );
199 trailingScanLine = originalImage.scanLine( trailingEdgeY );
200 leadingScanLine = originalImage.scanLine( leadingEdgeY );
202 for(originalImageX = editedImageX - RADIUS;
203 originalImageX <= editedImageX + RADIUS;
206 clampedX =
MAX(
MIN( originalImageX, originalImage.width() - 1 ), 0 );
209 rgb = ((QRgb*)trailingScanLine+clampedX);
215 rgb = ((QRgb*)leadingScanLine+clampedX);
226 scanLine = editedImage->scanLine( editedImageY );
227 rgb = ((QRgb*)scanLine+editedImageX);
234 if(useBusyIndicators)
237 if(newProgress >= updateIncrement)
241 qApp->processEvents();
StatusWidget * getStatus()
Triplet highestCountIndex