GrainEditor Class Reference

#include <grainEditor.h>

Inheritance diagram for GrainEditor:
[legend]
Collaboration diagram for GrainEditor:
[legend]

List of all members.


Detailed Description

Interface for adjusting image grain by bluring and sharpening.

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
PanningPreviewInterfacepreviewInterface
 Preview image.
SelectionPlacementInterfaceselectionPlacementInterface
 Interface for placing selection.
QComboBox * previewSelection
QFramebuttonsFrame
BlurSharpenSliderboundariesSlider
 Grain slider.
ClickableLabelboundariesIcon
BlurSharpenSliderregionsSlider
ClickableLabelregionsIcon

Constructor & Destructor Documentation

GrainEditor::GrainEditor ( QString  filename,
QWidget parent = 0,
const char *  name = 0 
)

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("Grain Editor") );
00185   //-------------------------------
00186 }

GrainEditor::~GrainEditor (  ) 

Definition at line 188 of file grainEditor.cpp.

00188 { }


Member Function Documentation

QImage * GrainEditor::getModifiedImage (  ) 

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 
00223   //convert to 32-bit depth if necessary
00224   if( adjustedImage->depth() < 32 )
00225   {
00226     QImage* tmp = adjustedImage;
00227     adjustedImage = new QImage( tmp->convertDepth( 32, Qt::AutoColor ) );
00228     delete tmp; tmp=NULL;
00229   }
00230   
00231   adjustImage( *adjustedImage, QPoint(0,0) );
00232   return adjustedImage;  
00233 }

void GrainEditor::keyPressEvent ( QKeyEvent *  e  )  [protected]

Definition at line 325 of file grainEditor.cpp.

References ADJUSTED_IMAGE, INV_SPLIT_VIEW, ORIGINAL_IMAGE, previewInterface, previewSelection, and SplitViewInterface::setPreviewMode().

00326 {
00327   if(e->key() == Qt::Key_Control )
00328   {
00329     PREVIEW_MODE curMode = (PREVIEW_MODE) previewSelection->currentItem();
00330     if(curMode == ORIGINAL_IMAGE)
00331       previewInterface->setPreviewMode( ADJUSTED_IMAGE, true );
00332     else if(curMode == ADJUSTED_IMAGE)
00333       previewInterface->setPreviewMode( ORIGINAL_IMAGE, true );
00334     else
00335       previewInterface->setPreviewMode( INV_SPLIT_VIEW );
00336   }
00337   else { QDialog::keyPressEvent(e); }
00338 }

void GrainEditor::keyReleaseEvent ( QKeyEvent *  e  )  [protected]

Definition at line 340 of file grainEditor.cpp.

References previewInterface, previewSelection, and SplitViewInterface::setPreviewMode().

00341 {
00342   if(e->key() == Qt::Key_Control )
00343   {
00344     previewInterface->setPreviewMode( (PREVIEW_MODE) previewSelection->currentItem(), 
00345                                       false );
00346   }
00347   else { QDialog::keyReleaseEvent(e); }
00348 }

void GrainEditor::selectPreviewImageType ( int  selection  )  [private, slot]

updates preview image

Definition at line 235 of file grainEditor.cpp.

References previewInterface, and SplitViewInterface::setPreviewMode().

Referenced by GrainEditor().

00236 {
00237   previewInterface->setPreviewMode( (PREVIEW_MODE)selection );
00238 }

void GrainEditor::resetBoundaries (  )  [private, slot]

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 }

void GrainEditor::resetRegions (  )  [private, slot]

reset blur/sharpen of regions

Definition at line 208 of file grainEditor.cpp.

00209 {
00210   //regionsSlider->setValue( 0 );
00211 }

void GrainEditor::applyAction (  )  [private, slot]

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 }

void GrainEditor::resetAction (  )  [private, slot]

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 }

void GrainEditor::previewResized (  )  [private, slot]

handle resize preview signals

Definition at line 240 of file grainEditor.cpp.

References generateAdjustedPreviewImage(), PanningPreviewInterface::getSelection(), previewInterface, selectionPlacementInterface, and SelectionPlacementInterface::setSelectedRegion().

Referenced by GrainEditor().

00241 {
00242   //reset selected region in selection placement interface
00243   selectionPlacementInterface->setSelectedRegion( previewInterface->getSelection() );
00244 
00245   //regenerate adjusted image and repaint
00246   generateAdjustedPreviewImage();
00247 }

void GrainEditor::generateAdjustedPreviewImage (  )  [private, slot]

generate and set adjusted image

Definition at line 249 of file grainEditor.cpp.

References adjustImage(), SplitViewInterface::getOrigImage(), PanningPreviewInterface::getSelection(), previewInterface, and SplitViewInterface::setAdjustedImage().

Referenced by GrainEditor(), and previewResized().

00250 {
00251   //get original image
00252   QImage origImage = previewInterface->getOrigImage();
00253 
00254   //construct adjusted image
00255   QImage adjustedImage = origImage.copy();
00256   adjustImage( adjustedImage, previewInterface->getSelection().topLeft() );
00257   
00258   //set adjusted image
00259   previewInterface->setAdjustedImage( adjustedImage );
00260 }

void GrainEditor::adjustImage ( QImage &  image,
QPoint  offset 
) [private]

Definition at line 262 of file grainEditor.cpp.

References blurImage(), boundariesSlider, edgesImage, origImageSize, and sharpenImage().

Referenced by generateAdjustedPreviewImage(), and getModifiedImage().

00263 {
00264   //no adjustment - don't change the image at all
00265   if( boundariesSlider->value() == 0 )//&&
00266       //regionsSlider->value() == 0 )
00267   { return; }
00268   
00269   //compute sigma
00270   float boundariesSigma;
00271   if( boundariesSlider->value() < 0 )
00272     boundariesSigma = (80.0f * QABS(boundariesSlider->value()) ) / 255.0f;  
00273   else
00274     boundariesSigma = (25.5f * QABS(boundariesSlider->value()) ) / 255.0f;  
00275 //  float regionsSigma = (20.0f * QABS(regionsSlider->value()) ) / 255.0f;  
00276 
00277   
00278   //sharpen
00279   if ( boundariesSlider->value() < 0 )
00280   {
00281     sharpenImage( image, boundariesSigma, 
00282                   offset, origImageSize,
00283                   &edgesImage, true ); 
00284   }
00285   //blur
00286   else if( boundariesSlider->value() > 0 )
00287   {
00288     blurImage( image, boundariesSigma );
00289   }
00290 
00291   /*
00292   //sharpen boundaries
00293   if ( boundariesSlider->value() < 0 )
00294   {
00295     sharpenImage( image, boundariesSigma, 
00296                   offset, origImageSize,
00297                   &edgesImage, true ); 
00298   }
00299   //blur boundaries
00300   else if( boundariesSlider->value() > 0 )
00301   {
00302     blurImage( image, boundariesSigma, 
00303                offset, origImageSize,
00304                &edgesImage, NULL, numRegions, true ); 
00305   }
00306   
00307   //sharpen regions
00308   if ( regionsSlider->value() < 0 )
00309   {
00310     sharpenImage( image, regionsSigma, 
00311                   offset, origImageSize,
00312                   &edgesImage, false ); 
00313   }
00314   //blur regions
00315   else if( regionsSlider->value() > 0 )
00316   { 
00317     blurImage( image, regionsSigma, 
00318                offset, origImageSize,
00319                &edgesImage, clusterMap, numRegions, false );
00320   }
00321   */
00322 
00323 }


Member Data Documentation

QString GrainEditor::fileName [private]

Definition at line 78 of file grainEditor.h.

Referenced by getModifiedImage().

QSize GrainEditor::origImageSize [private]

Definition at line 81 of file grainEditor.h.

Referenced by adjustImage(), and GrainEditor().

QImage GrainEditor::edgesImage [private]

Definition at line 84 of file grainEditor.h.

Referenced by adjustImage(), and GrainEditor().

int* GrainEditor::clusterMap [private]

Definition at line 87 of file grainEditor.h.

Referenced by GrainEditor().

int GrainEditor::numRegions [private]

Definition at line 88 of file grainEditor.h.

Referenced by GrainEditor().

PanningPreviewInterface* GrainEditor::previewInterface [private]

Preview image.

Definition at line 91 of file grainEditor.h.

Referenced by generateAdjustedPreviewImage(), GrainEditor(), keyPressEvent(), keyReleaseEvent(), previewResized(), and selectPreviewImageType().

SelectionPlacementInterface* GrainEditor::selectionPlacementInterface [private]

Interface for placing selection.

Definition at line 94 of file grainEditor.h.

Referenced by GrainEditor(), and previewResized().

QComboBox* GrainEditor::previewSelection [private]

Definition at line 96 of file grainEditor.h.

Referenced by GrainEditor(), keyPressEvent(), and keyReleaseEvent().

QFrame* GrainEditor::buttonsFrame [private]

Definition at line 97 of file grainEditor.h.

Referenced by GrainEditor().

BlurSharpenSlider* GrainEditor::boundariesSlider [private]

Grain slider.

Definition at line 100 of file grainEditor.h.

Referenced by adjustImage(), applyAction(), GrainEditor(), resetAction(), and resetBoundaries().

ClickableLabel* GrainEditor::boundariesIcon [private]

Definition at line 101 of file grainEditor.h.

Referenced by GrainEditor().

BlurSharpenSlider* GrainEditor::regionsSlider [private]

Definition at line 103 of file grainEditor.h.

ClickableLabel* GrainEditor::regionsIcon [private]

Definition at line 104 of file grainEditor.h.


The documentation for this class was generated from the following files:
Generated on Thu Jan 3 10:52:49 2008 for AlbumShaper by  doxygen 1.5.4