@@ -2613,13 +2613,72 @@ void QgsRasterLayer::setColorShadingAlgorithm( QString theShaderAlgorithm )
2613
2613
2614
2614
void QgsRasterLayer::setContrastEnhancementAlgorithm ( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, bool theGenerateLookupTableFlag )
2615
2615
{
2616
- QList<QgsContrastEnhancement>::iterator myIterator = mContrastEnhancementList .begin ();
2617
- while ( myIterator != mContrastEnhancementList .end () )
2616
+ if ( !mRenderer || !mDataProvider )
2618
2617
{
2619
- ( *myIterator ).setContrastEnhancementAlgorithm ( theAlgorithm, theGenerateLookupTableFlag );
2620
- ++myIterator;
2618
+ return ;
2619
+ }
2620
+
2621
+ QString rendererType = mRenderer ->type ();
2622
+ if ( rendererType == " singlebandgray" )
2623
+ {
2624
+ QgsSingleBandGrayRenderer* gr = dynamic_cast <QgsSingleBandGrayRenderer*>( mRenderer );
2625
+ if ( gr )
2626
+ {
2627
+ int grayBand = gr->grayBand ();
2628
+ if ( grayBand == -1 )
2629
+ {
2630
+ return ;
2631
+ }
2632
+ QgsRasterDataProvider::DataType dataType = ( QgsRasterDataProvider::DataType )mDataProvider ->dataType ( grayBand );
2633
+ QgsContrastEnhancement* ce = new QgsContrastEnhancement (( QgsContrastEnhancement::QgsRasterDataType )dataType );
2634
+ ce->setContrastEnhancementAlgorithm ( theAlgorithm, theGenerateLookupTableFlag );
2635
+ ce->setMinimumValue ( mDataProvider ->minimumValue ( grayBand ) );
2636
+ ce->setMaximumValue ( mDataProvider ->maximumValue ( grayBand ) );
2637
+ gr->setContrastEnhancement ( ce );
2638
+ }
2639
+ }
2640
+ else if ( rendererType == " multibandcolor" )
2641
+ {
2642
+ QgsMultiBandColorRenderer* cr = dynamic_cast <QgsMultiBandColorRenderer*>( mRenderer );
2643
+ if ( cr )
2644
+ {
2645
+ // red enhancement
2646
+ int redBand = cr->redBand ();
2647
+ if ( redBand != -1 )
2648
+ {
2649
+ QgsRasterDataProvider::DataType redType = ( QgsRasterDataProvider::DataType )mDataProvider ->dataType ( redBand );
2650
+ QgsContrastEnhancement* redEnhancement = new QgsContrastEnhancement (( QgsContrastEnhancement::QgsRasterDataType )redType );
2651
+ redEnhancement->setContrastEnhancementAlgorithm ( theAlgorithm, theGenerateLookupTableFlag );
2652
+ redEnhancement->setMinimumValue ( mDataProvider ->minimumValue ( redBand ) );
2653
+ redEnhancement->setMaximumValue ( mDataProvider ->maximumValue ( redBand ) );
2654
+ cr->setRedContrastEnhancement ( redEnhancement );
2655
+ }
2656
+
2657
+ // green enhancement
2658
+ int greenBand = cr->greenBand ();
2659
+ if ( greenBand != -1 )
2660
+ {
2661
+ QgsRasterDataProvider::DataType greenType = ( QgsRasterDataProvider::DataType )mDataProvider ->dataType ( cr->greenBand () );
2662
+ QgsContrastEnhancement* greenEnhancement = new QgsContrastEnhancement (( QgsContrastEnhancement::QgsRasterDataType )greenType );
2663
+ greenEnhancement->setContrastEnhancementAlgorithm ( theAlgorithm, theGenerateLookupTableFlag );
2664
+ greenEnhancement->setMinimumValue ( mDataProvider ->minimumValue ( greenBand ) );
2665
+ greenEnhancement->setMaximumValue ( mDataProvider ->maximumValue ( greenBand ) );
2666
+ cr->setGreenContrastEnhancement ( greenEnhancement );
2667
+ }
2668
+
2669
+ // blue enhancement
2670
+ int blueBand = cr->blueBand ();
2671
+ if ( blueBand != -1 )
2672
+ {
2673
+ QgsRasterDataProvider::DataType blueType = ( QgsRasterDataProvider::DataType )mDataProvider ->dataType ( cr->blueBand () );
2674
+ QgsContrastEnhancement* blueEnhancement = new QgsContrastEnhancement (( QgsContrastEnhancement::QgsRasterDataType )blueType );
2675
+ blueEnhancement->setContrastEnhancementAlgorithm ( theAlgorithm, theGenerateLookupTableFlag );
2676
+ blueEnhancement->setMinimumValue ( mDataProvider ->minimumValue ( blueBand ) );
2677
+ blueEnhancement->setMaximumValue ( mDataProvider ->maximumValue ( blueBand ) );
2678
+ cr->setBlueContrastEnhancement ( blueEnhancement );
2679
+ }
2680
+ }
2621
2681
}
2622
- mContrastEnhancementAlgorithm = theAlgorithm;
2623
2682
}
2624
2683
2625
2684
void QgsRasterLayer::setContrastEnhancementAlgorithm ( QString theAlgorithm, bool theGenerateLookupTableFlag )
0 commit comments