#include <grainEditor.h>
Inheritance diagram for GrainEditor:
Definition at line 31 of file grainEditor.h.
Public Member Functions | |
GrainEditor (QString filename, QWidget *parent=0, const char *name=0) | |
Constructs layout. | |
~GrainEditor () | |
QImage * | getModifiedImage () |
get modified image that resulted from adjustments | |
Protected Member Functions | |
void | keyPressEvent (QKeyEvent *e) |
void | keyReleaseEvent (QKeyEvent *e) |
Private Slots | |
void | selectPreviewImageType (int selection) |
updates preview image | |
void | resetBoundaries () |
reset blur/sharpen of object boundaries | |
void | resetRegions () |
reset blur/sharpen of regions | |
void | applyAction () |
check for changes to settings, if so | |
void | resetAction () |
resets image grain to original state | |
void | previewResized () |
handle resize preview signals | |
void | generateAdjustedPreviewImage () |
generate and set adjusted image | |
Private Member Functions | |
void | adjustImage (QImage &image, QPoint offset) |
Private Attributes | |
QString | fileName |
QSize | origImageSize |
QImage | edgesImage |
int * | clusterMap |
int | numRegions |
PanningPreviewInterface * | previewInterface |
Preview image. | |
SelectionPlacementInterface * | selectionPlacementInterface |
Interface for placing selection. | |
QComboBox * | previewSelection |
QFrame * | buttonsFrame |
BlurSharpenSlider * | boundariesSlider |
Grain slider. | |
ClickableLabel * | boundariesIcon |
BlurSharpenSlider * | regionsSlider |
ClickableLabel * | regionsIcon |
|
Constructs layout.
Definition at line 36 of file grainEditor.cpp. References applyAction(), boundariesIcon, boundariesSlider, buttonsFrame, clusterMap, edgesImage, generateAdjustedPreviewImage(), EdgeDetect::getClusterMap(), getImageSize(), EdgeDetect::getNumClusters(), IMAGE_PATH, numRegions, origImageSize, previewInterface, previewResized(), previewSelection, resetAction(), resetBoundaries(), scaleImage(), selectionPlacementInterface, selectPreviewImageType(), ClickableLabel::setPixmap(), SLIDER_RADIUS, and WIDGET_SPACING. 00036 : QDialog(parent,name,true) 00037 { 00038 //record filename 00039 this->fileName = fileName; 00040 00041 //record original image size 00042 getImageSize( fileName, origImageSize ); 00043 00044 //construct edges image 00045 //speed up edge finding by scaling image down to < 800x600 00046 scaleImage( fileName, edgesImage, 512, 384 ); 00047 EdgeDetect detector( &edgesImage ); 00048 clusterMap = detector.getClusterMap(); 00049 numRegions = detector.getNumClusters(); 00050 00051 QFrame* visibleFrame = new QFrame( this, "visible widgets" ); 00052 //-------------- 00053 //Preview frame 00054 previewInterface = new PanningPreviewInterface( fileName, 00055 visibleFrame, "previewInterface" ); 00056 previewSelection = new QComboBox( visibleFrame, "previewSelction" ); 00057 previewSelection->insertItem( tr("Split View") ); 00058 previewSelection->insertItem( tr("Original Image") ); 00059 previewSelection->insertItem( tr("Adjusted Image") ); 00060 connect( previewSelection, SIGNAL(activated(int)), this, SLOT(selectPreviewImageType(int)) ); 00061 //-------------- 00062 //Controls frame 00063 QFrame* controlsFrame = new QFrame( visibleFrame, "controlsFrame" ); 00064 00065 QLabel* selectionLabel = new QLabel( tr("Region Shown in Detail:"), 00066 controlsFrame, "selectionLabel" ); 00067 00068 selectionPlacementInterface = new SelectionPlacementInterface( fileName, 00069 controlsFrame, 00070 "selectionPlacementInterface" ); 00071 //-- 00072 connect( previewInterface, SIGNAL( selectionChanged() ), 00073 this, SLOT( previewResized() ) ); 00074 connect( selectionPlacementInterface, SIGNAL(placementChanged(QRect)), 00075 previewInterface, SLOT(setSelection(QRect)) ); 00076 //-- 00077 boundariesSlider = new BlurSharpenSlider( Qt::Vertical, controlsFrame ); 00078 boundariesSlider->setMinValue( -SLIDER_RADIUS ); 00079 boundariesSlider->setMaxValue( SLIDER_RADIUS ); 00080 connect( boundariesSlider, SIGNAL(valueChanged(int)), 00081 this, SLOT(generateAdjustedPreviewImage()) ); 00082 00083 boundariesIcon = new ClickableLabel( controlsFrame, "boundariesIcon" ); 00084 connect( boundariesIcon, SIGNAL(clicked()), SLOT(resetBoundaries()) ); 00085 00086 // boundariesIcon->setPixmap( QPixmap(QString(IMAGE_PATH)+"miscImages/boundaries.png") ); 00087 // QToolTip::add( boundariesSlider, tr("Blur/sharpen boundaries") ); 00088 // QToolTip::add( boundariesIcon, tr("Reset boundaries") ); 00089 boundariesIcon->setPixmap( QPixmap(QString(IMAGE_PATH)+"miscImages/blurSharpen.png") ); 00090 QToolTip::add( boundariesSlider, tr("Blur/Sharpen Image") ); 00091 QToolTip::add( boundariesIcon, tr("Reset") ); 00092 //-- 00093 /* 00094 regionsSlider = new QSlider(Qt::Vertical, controlsFrame ); 00095 regionsSlider->setMinValue( -SLIDER_RADIUS ); 00096 regionsSlider->setMaxValue( SLIDER_RADIUS ); 00097 connect( regionsSlider, SIGNAL(valueChanged(int)), 00098 this, SLOT(generateAdjustedPreviewImage()) ); 00099 QToolTip::add( regionsSlider, tr("Blur/sharpen regions") ); 00100 00101 regionsIcon = new ClickableLabel( controlsFrame, "regionsIcon" ); 00102 regionsIcon->setPixmap( QPixmap(QString(IMAGE_PATH)+"miscImages/regions.png") ); 00103 connect( regionsIcon, SIGNAL(clicked()), SLOT(resetRegions()) ); 00104 QToolTip::add( regionsIcon, tr("Reset regions") ); 00105 */ 00106 //-- 00107 QGridLayout* controlsGrid = new QGridLayout( controlsFrame, 6, 4, 0 ); 00108 controlsGrid->setRowStretch( 0, 1 ); 00109 00110 controlsGrid->addMultiCellWidget( selectionLabel, 1,1, 0,3 ); 00111 controlsGrid->addMultiCellWidget( selectionPlacementInterface, 2,2, 0,3 ); 00112 00113 controlsGrid->addWidget( boundariesSlider, 3, 1 ); 00114 controlsGrid->addWidget( boundariesIcon, 4, 1 ); 00115 00116 // controlsGrid->addWidget( regionsSlider, 3, 2 ); 00117 // controlsGrid->addWidget( regionsIcon, 4, 2 ); 00118 00119 //make sure sliders have enough space so all slider units are settable 00120 controlsGrid->setRowSpacing( 3, 2*SLIDER_RADIUS + 5) ; 00121 00122 controlsGrid->setRowStretch( 5, 1 ); 00123 controlsGrid->setSpacing( WIDGET_SPACING ); 00124 00125 controlsGrid->setColStretch( 0, 1 ); 00126 controlsGrid->setColStretch( 3, 1 ); 00127 //-------------- 00128 //Dialog buttons: 00129 buttonsFrame = new QFrame( visibleFrame, "dialogButtons" ); 00130 00131 QPushButton* applyButton = new QPushButton( tr("Apply"), buttonsFrame ); 00132 applyButton->setDefault(true); 00133 applyButton->setFocus(); 00134 connect( applyButton, SIGNAL(clicked()), SLOT(applyAction()) ); 00135 00136 QPushButton* cancelButton = new QPushButton( tr("Cancel"), buttonsFrame ); 00137 connect( cancelButton, SIGNAL(clicked()), SLOT(reject()) ); 00138 00139 QPushButton* resetButton = new QPushButton( tr("Reset"), buttonsFrame ); 00140 connect( resetButton, SIGNAL(clicked()), SLOT(resetAction()) ); 00141 00142 QGridLayout* buttonsGrid = new QGridLayout( buttonsFrame, 1, 5, 0 ); 00143 buttonsGrid->setColStretch( 0, 1 ); 00144 buttonsGrid->addWidget( applyButton, 0, 1 ); 00145 buttonsGrid->addWidget( cancelButton, 0, 2 ); 00146 buttonsGrid->addWidget( resetButton, 0, 3 ); 00147 buttonsGrid->setColStretch( 4, 1 ); 00148 buttonsGrid->setSpacing( WIDGET_SPACING ); 00149 //-------------- 00150 //Top level grid 00151 QGridLayout* mainGrid = new QGridLayout( visibleFrame, 3, 2, 0 ); 00152 00153 mainGrid->addWidget( previewInterface, 0,0 ); 00154 mainGrid->addWidget( previewSelection, 1,0, Qt::AlignHCenter ); 00155 00156 mainGrid->addMultiCellWidget( controlsFrame, 0,1, 1,1 ); 00157 00158 mainGrid->addMultiCellWidget( buttonsFrame, 2,2, 0,1 ); 00159 00160 mainGrid->setRowStretch( 0, 1 ); 00161 mainGrid->setColStretch( 0, 1 ); 00162 00163 mainGrid->setSpacing( WIDGET_SPACING ); 00164 mainGrid->setMargin( WIDGET_SPACING ); 00165 00166 00167 QGridLayout* invisibleGrid = new QGridLayout( this, 2, 1, 0 ); 00168 invisibleGrid->addWidget( visibleFrame, 0, 0 ); 00169 invisibleGrid->setRowStretch( 0, 1 ); 00170 00171 //PLATFORM_SPECIFIC_CODE 00172 //windows users expect a grip, but qt doesn't put one in by default. we'll add 00173 //it for them too. :-) 00174 #if defined(Q_OS_WIN) 00175 QSizeGrip* sizeGrip = new QSizeGrip( this ); 00176 invisibleGrid->addWidget( sizeGrip, 1, 0, Qt::AlignRight | Qt::AlignBottom ); 00177 #endif 00178 00179 00180 00181 00182 //-------------- 00183 //Window caption 00184 setCaption( tr("Album Shaper: Grain Editor") ); 00185 //------------------------------- 00186 }
|
|
Definition at line 188 of file grainEditor.cpp. 00188 { }
|
|
Definition at line 253 of file grainEditor.cpp. References blurImage(), boundariesSlider, edgesImage, origImageSize, and sharpenImage(). Referenced by generateAdjustedPreviewImage(), and getModifiedImage(). 00254 { 00255 //no adjustment - don't change the image at all 00256 if( boundariesSlider->value() == 0 )//&& 00257 //regionsSlider->value() == 0 ) 00258 { return; } 00259 00260 //compute sigma 00261 float boundariesSigma; 00262 if( boundariesSlider->value() < 0 ) 00263 boundariesSigma = (80.0f * QABS(boundariesSlider->value()) ) / 255.0f; 00264 else 00265 boundariesSigma = (25.5f * QABS(boundariesSlider->value()) ) / 255.0f; 00266 // float regionsSigma = (20.0f * QABS(regionsSlider->value()) ) / 255.0f; 00267 00268 00269 //sharpen 00270 if ( boundariesSlider->value() < 0 ) 00271 { 00272 sharpenImage( image, boundariesSigma, 00273 offset, origImageSize, 00274 &edgesImage, true ); 00275 } 00276 //blur 00277 else if( boundariesSlider->value() > 0 ) 00278 { 00279 blurImage( image, boundariesSigma ); 00280 } 00281 00282 /* 00283 //sharpen boundaries 00284 if ( boundariesSlider->value() < 0 ) 00285 { 00286 sharpenImage( image, boundariesSigma, 00287 offset, origImageSize, 00288 &edgesImage, true ); 00289 } 00290 //blur boundaries 00291 else if( boundariesSlider->value() > 0 ) 00292 { 00293 blurImage( image, boundariesSigma, 00294 offset, origImageSize, 00295 &edgesImage, NULL, numRegions, true ); 00296 } 00297 00298 //sharpen regions 00299 if ( regionsSlider->value() < 0 ) 00300 { 00301 sharpenImage( image, regionsSigma, 00302 offset, origImageSize, 00303 &edgesImage, false ); 00304 } 00305 //blur regions 00306 else if( regionsSlider->value() > 0 ) 00307 { 00308 blurImage( image, regionsSigma, 00309 offset, origImageSize, 00310 &edgesImage, clusterMap, numRegions, false ); 00311 } 00312 */ 00313 00314 }
|
|
check for changes to settings, if so
Definition at line 190 of file grainEditor.cpp. References boundariesSlider. Referenced by GrainEditor(). 00191 { 00192 //check if user has adjusted grain. 00193 //if any changes have taken place call "accept", else "reject" so image is not 00194 //updated and appear modified 00195 if( boundariesSlider->value() != 0 ) 00196 //|| 00197 // regionsSlider->value() != 0 ) 00198 { accept(); } 00199 else 00200 { reject(); } 00201 }
|
|
generate and set adjusted image
Definition at line 240 of file grainEditor.cpp. References adjustImage(), SplitViewInterface::getOrigImage(), PanningPreviewInterface::getSelection(), previewInterface, and SplitViewInterface::setAdjustedImage(). Referenced by GrainEditor(), and previewResized(). 00241 { 00242 //get original image 00243 QImage origImage = previewInterface->getOrigImage(); 00244 00245 //construct adjusted image 00246 QImage adjustedImage = origImage.copy(); 00247 adjustImage( adjustedImage, previewInterface->getSelection().topLeft() ); 00248 00249 //set adjusted image 00250 previewInterface->setAdjustedImage( adjustedImage ); 00251 }
|
|
get modified image that resulted from adjustments
Definition at line 219 of file grainEditor.cpp. References adjustImage(), and fileName. 00220 { 00221 QImage* adjustedImage = new QImage(fileName); 00222 adjustImage( *adjustedImage, QPoint(0,0) ); 00223 return adjustedImage; 00224 }
|
|
Definition at line 316 of file grainEditor.cpp. References ADJUSTED_IMAGE, INV_SPLIT_VIEW, ORIGINAL_IMAGE, PREVIEW_MODE, previewInterface, previewSelection, and SplitViewInterface::setPreviewMode(). 00317 { 00318 if(e->key() == Qt::Key_Control ) 00319 { 00320 PREVIEW_MODE curMode = (PREVIEW_MODE) previewSelection->currentItem(); 00321 if(curMode == ORIGINAL_IMAGE) 00322 previewInterface->setPreviewMode( ADJUSTED_IMAGE, true ); 00323 else if(curMode == ADJUSTED_IMAGE) 00324 previewInterface->setPreviewMode( ORIGINAL_IMAGE, true ); 00325 else 00326 previewInterface->setPreviewMode( INV_SPLIT_VIEW ); 00327 } 00328 else { QDialog::keyPressEvent(e); } 00329 }
|
|
Definition at line 331 of file grainEditor.cpp. References PREVIEW_MODE, previewInterface, previewSelection, and SplitViewInterface::setPreviewMode(). 00332 { 00333 if(e->key() == Qt::Key_Control ) 00334 { 00335 previewInterface->setPreviewMode( (PREVIEW_MODE) previewSelection->currentItem(), 00336 false ); 00337 } 00338 else { QDialog::keyReleaseEvent(e); } 00339 }
|
|
handle resize preview signals
Definition at line 231 of file grainEditor.cpp. References generateAdjustedPreviewImage(), PanningPreviewInterface::getSelection(), previewInterface, selectionPlacementInterface, and SelectionPlacementInterface::setSelectedRegion(). Referenced by GrainEditor(). 00232 { 00233 //reset selected region in selection placement interface 00234 selectionPlacementInterface->setSelectedRegion( previewInterface->getSelection() ); 00235 00236 //regenerate adjusted image and repaint 00237 generateAdjustedPreviewImage(); 00238 }
|
|
resets image grain to original state
Definition at line 213 of file grainEditor.cpp. References boundariesSlider. Referenced by GrainEditor(). 00214 { 00215 boundariesSlider->setValue( 0 ); 00216 //regionsSlider->setValue( 0 ); 00217 }
|
|
reset blur/sharpen of object boundaries
Definition at line 203 of file grainEditor.cpp. References boundariesSlider. Referenced by GrainEditor(). 00204 { 00205 boundariesSlider->setValue( 0 ); 00206 }
|
|
reset blur/sharpen of regions
Definition at line 208 of file grainEditor.cpp. 00209 {
00210 //regionsSlider->setValue( 0 );
00211 }
|
|
updates preview image
Definition at line 226 of file grainEditor.cpp. References PREVIEW_MODE, previewInterface, and SplitViewInterface::setPreviewMode(). Referenced by GrainEditor(). 00227 { 00228 previewInterface->setPreviewMode( (PREVIEW_MODE)selection ); 00229 }
|
|
Definition at line 101 of file grainEditor.h. Referenced by GrainEditor(). |
|
Grain slider.
Definition at line 100 of file grainEditor.h. Referenced by adjustImage(), applyAction(), GrainEditor(), resetAction(), and resetBoundaries(). |
|
Definition at line 97 of file grainEditor.h. Referenced by GrainEditor(). |
|
Definition at line 87 of file grainEditor.h. Referenced by GrainEditor(). |
|
Definition at line 84 of file grainEditor.h. Referenced by adjustImage(), and GrainEditor(). |
|
Definition at line 78 of file grainEditor.h. Referenced by getModifiedImage(). |
|
Definition at line 88 of file grainEditor.h. Referenced by GrainEditor(). |
|
Definition at line 81 of file grainEditor.h. Referenced by adjustImage(), and GrainEditor(). |
|
Preview image.
Definition at line 91 of file grainEditor.h. Referenced by generateAdjustedPreviewImage(), GrainEditor(), keyPressEvent(), keyReleaseEvent(), previewResized(), and selectPreviewImageType(). |
|
Definition at line 96 of file grainEditor.h. Referenced by GrainEditor(), keyPressEvent(), and keyReleaseEvent(). |
|
Definition at line 104 of file grainEditor.h. |
|
Definition at line 103 of file grainEditor.h. |
|
Interface for placing selection.
Definition at line 94 of file grainEditor.h. Referenced by GrainEditor(), and previewResized(). |