Skip to content

Commit

Permalink
Improvements to single band gray renderer widget
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Mar 13, 2012
1 parent c7d284d commit 267c1e2
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 9 deletions.
15 changes: 8 additions & 7 deletions src/core/raster/qgsrasterlayer.cpp
Expand Up @@ -646,20 +646,21 @@ void QgsRasterLayer::setRendererForDrawingStyle( const DrawingStyle & theDrawin
{
int grayBand = bandNumber( mGrayBandName );
renderer = new QgsSingleBandGrayRenderer( mDataProvider, grayBand );
QgsContrastEnhancement* ce = new QgsContrastEnhancement(( QgsContrastEnhancement::QgsRasterDataType )(
mDataProvider->dataType( grayBand ) ) );
ce->setContrastEnhancementAlgorithm( contrastEnhancementAlgorithm() );
if ( QgsContrastEnhancement::NoEnhancement != contrastEnhancementAlgorithm() && !mUserDefinedGrayMinimumMaximum && mStandardDeviations > 0 )
{
mGrayMinimumMaximumEstimated = false;
QgsRasterBandStats myGrayBandStats = bandStatistics( grayBand );
setMaximumValue( grayBand, myGrayBandStats.mean + ( mStandardDeviations * myGrayBandStats.stdDev ) );
setMinimumValue( grayBand, myGrayBandStats.mean - ( mStandardDeviations * myGrayBandStats.stdDev ) );
ce->setMinimumValue( myGrayBandStats.mean - ( mStandardDeviations * myGrayBandStats.stdDev ) );
ce->setMaximumValue( myGrayBandStats.mean + ( mStandardDeviations * myGrayBandStats.stdDev ) );
}
else if ( QgsContrastEnhancement::NoEnhancement != contrastEnhancementAlgorithm() && !mUserDefinedGrayMinimumMaximum )
{
mGrayMinimumMaximumEstimated = true;
setMaximumValue( grayBand, mDataProvider->maximumValue( grayBand ) );
setMinimumValue( grayBand, mDataProvider->minimumValue( grayBand ) );
ce->setMinimumValue( mDataProvider->minimumValue( grayBand ) );
ce->setMaximumValue( mDataProvider->maximumValue( grayBand ) );
}
(( QgsSingleBandGrayRenderer* )renderer )->setContrastEnhancement( contrastEnhancement( grayBand ) );
(( QgsSingleBandGrayRenderer* )renderer )->setContrastEnhancement( ce );
break;
}
case SingleBandPseudoColor:
Expand Down
46 changes: 44 additions & 2 deletions src/gui/raster/qgssinglebandgrayrendererwidget.cpp
Expand Up @@ -79,8 +79,8 @@ QgsRasterRenderer* QgsSingleBandGrayRendererWidget::renderer()

QgsContrastEnhancement* e = new QgsContrastEnhancement(( QgsContrastEnhancement::QgsRasterDataType )(
provider->dataType( band ) ) );
e->setMinimumValue( mMinLineEdit->text().toInt() );
e->setMaximumValue( mMaxLineEdit->text().toInt() );
e->setMinimumValue( mMinLineEdit->text().toDouble() );
e->setMaximumValue( mMaxLineEdit->text().toDouble() );
e->setContrastEnhancementAlgorithm(( QgsContrastEnhancement::ContrastEnhancementAlgorithm )( mContrastEnhancementComboBox->itemData(
mContrastEnhancementComboBox->currentIndex() ).toInt() ) );

Expand All @@ -89,3 +89,45 @@ QgsRasterRenderer* QgsSingleBandGrayRendererWidget::renderer()
renderer->setContrastEnhancement( e );
return renderer;
}

void QgsSingleBandGrayRendererWidget::on_mLoadPushButton_clicked()
{
if ( !mRasterLayer )
{
return;
}
QgsRasterDataProvider* provider = mRasterLayer->dataProvider();
if ( !provider )
{
return;
}

int band = mGrayBandComboBox->itemData( mGrayBandComboBox->currentIndex() ).toInt();
double minVal = 0;
double maxVal = 0;
if ( mEstimateRadioButton->isChecked() )
{
minVal = provider->minimumValue( band );
maxVal = provider->maximumValue( band );
}
else if ( mActualRadioButton->isChecked() )
{
QgsRasterBandStats rasterBandStats = mRasterLayer->bandStatistics( band );
minVal = rasterBandStats.minimumValue;
maxVal = rasterBandStats.maximumValue;
}
else if ( mCurrentExtentRadioButton->isChecked() )
{
double minMax[2];
mRasterLayer->computeMinimumMaximumFromLastExtent( band, minMax );
minVal = minMax[0];
maxVal = minMax[1];
}
else
{
return;
}

mMinLineEdit->setText( QString::number( minVal ) );
mMaxLineEdit->setText( QString::number( maxVal ) );
}
3 changes: 3 additions & 0 deletions src/gui/raster/qgssinglebandgrayrendererwidget.h
Expand Up @@ -31,6 +31,9 @@ class QgsSingleBandGrayRendererWidget: public QgsRasterRendererWidget, private U
static QgsRasterRendererWidget* create( QgsRasterLayer* layer ) { return new QgsSingleBandGrayRendererWidget( layer ); }

QgsRasterRenderer* renderer();

private slots:
void on_mLoadPushButton_clicked();
};

#endif // QGSSINGLEBANDGRAYRENDERERWIDGET_H
3 changes: 3 additions & 0 deletions src/ui/qgssinglebandgrayrendererwidgetbase.ui
Expand Up @@ -73,6 +73,9 @@
<property name="text">
<string>Estimate (faster)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
Expand Down

0 comments on commit 267c1e2

Please sign in to comment.