Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Class Members | File Members

GrainEditor Class Reference

#include <grainEditor.h>

Inheritance diagram for GrainEditor:

Inheritance graph
[legend]
Collaboration diagram for GrainEditor:

Collaboration graph
[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("Album Shaper: Grain Editor") );
00185   //-------------------------------
00186 }

GrainEditor::~GrainEditor  ) 
 

Definition at line 188 of file grainEditor.cpp.

00188 { }


Member Function Documentation

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

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 }

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::generateAdjustedPreviewImage  )  [private, slot]
 

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 }

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   adjustImage( *adjustedImage, QPoint(0,0) );
00223   return adjustedImage;  
00224 }

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

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 }

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

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 }

void GrainEditor::previewResized  )  [private, slot]
 

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 }

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::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::selectPreviewImageType int  selection  )  [private, slot]
 

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 }


Member Data Documentation

ClickableLabel* GrainEditor::boundariesIcon [private]
 

Definition at line 101 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().

QFrame* GrainEditor::buttonsFrame [private]
 

Definition at line 97 of file grainEditor.h.

Referenced by GrainEditor().

int* GrainEditor::clusterMap [private]
 

Definition at line 87 of file grainEditor.h.

Referenced by GrainEditor().

QImage GrainEditor::edgesImage [private]
 

Definition at line 84 of file grainEditor.h.

Referenced by adjustImage(), and GrainEditor().

QString GrainEditor::fileName [private]
 

Definition at line 78 of file grainEditor.h.

Referenced by getModifiedImage().

int GrainEditor::numRegions [private]
 

Definition at line 88 of file grainEditor.h.

Referenced by GrainEditor().

QSize GrainEditor::origImageSize [private]
 

Definition at line 81 of file grainEditor.h.

Referenced by adjustImage(), and GrainEditor().

PanningPreviewInterface* GrainEditor::previewInterface [private]
 

Preview image.

Definition at line 91 of file grainEditor.h.

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

QComboBox* GrainEditor::previewSelection [private]
 

Definition at line 96 of file grainEditor.h.

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

ClickableLabel* GrainEditor::regionsIcon [private]
 

Definition at line 104 of file grainEditor.h.

BlurSharpenSlider* GrainEditor::regionsSlider [private]
 

Definition at line 103 of file grainEditor.h.

SelectionPlacementInterface* GrainEditor::selectionPlacementInterface [private]
 

Interface for placing selection.

Definition at line 94 of file grainEditor.h.

Referenced by GrainEditor(), and previewResized().


The documentation for this class was generated from the following files:
Generated on Sat Apr 2 05:44:57 2005 for AlbumShaper by  doxygen 1.3.9.1