@@ -910,24 +910,42 @@ void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnh
910910 QgsRasterMinMaxOrigin myMinMaxOrigin;
911911 QgsRasterRenderer* myRasterRenderer = nullptr ;
912912 QgsSingleBandGrayRenderer* myGrayRenderer = nullptr ;
913+ QgsSingleBandPseudoColorRenderer* myPseudoColorRenderer = nullptr ;
913914 QgsMultiBandColorRenderer* myMultiBandRenderer = nullptr ;
914915 QString rendererType = rasterRenderer->type ();
915916 if ( rendererType == QLatin1String ( " singlebandgray" ) )
916917 {
917918 myGrayRenderer = dynamic_cast <QgsSingleBandGrayRenderer*>( rasterRenderer );
918- if ( !myGrayRenderer ) return ;
919+ if ( !myGrayRenderer )
920+ {
921+ return ;
922+ }
919923 myBands << myGrayRenderer->grayBand ();
920924 myRasterRenderer = myGrayRenderer;
921925 myMinMaxOrigin = myGrayRenderer->minMaxOrigin ();
922926 }
923927 else if ( rendererType == QLatin1String ( " multibandcolor" ) )
924928 {
925929 myMultiBandRenderer = dynamic_cast <QgsMultiBandColorRenderer*>( rasterRenderer );
926- if ( !myMultiBandRenderer ) return ;
930+ if ( !myMultiBandRenderer )
931+ {
932+ return ;
933+ }
927934 myBands << myMultiBandRenderer->redBand () << myMultiBandRenderer->greenBand () << myMultiBandRenderer->blueBand ();
928935 myRasterRenderer = myMultiBandRenderer;
929936 myMinMaxOrigin = myMultiBandRenderer->minMaxOrigin ();
930937 }
938+ else if ( rendererType == QLatin1String ( " singlebandpseudocolor" ) )
939+ {
940+ myPseudoColorRenderer = dynamic_cast <QgsSingleBandPseudoColorRenderer*>( rasterRenderer );
941+ if ( !myPseudoColorRenderer )
942+ {
943+ return ;
944+ }
945+ myBands << myPseudoColorRenderer->band ();
946+ myRasterRenderer = myPseudoColorRenderer;
947+ myMinMaxOrigin = myPseudoColorRenderer->minMaxOrigin ();
948+ }
931949
932950 Q_FOREACH ( int myBand, myBands )
933951 {
@@ -941,9 +959,25 @@ void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnh
941959 double max;
942960 computeMinMax ( myBand, myMinMaxOrigin, theLimits, theExtent, theSampleSize, min, max );
943961
944- myEnhancement->setMinimumValue ( min );
945- myEnhancement->setMaximumValue ( max );
946- myEnhancements.append ( myEnhancement );
962+ if ( rendererType == QLatin1String ( " singlebandpseudocolor" ) )
963+ {
964+ myPseudoColorRenderer->setClassificationMin ( min );
965+ myPseudoColorRenderer->setClassificationMax ( max );
966+ if ( myPseudoColorRenderer->shader () )
967+ {
968+ QgsColorRampShader* colorRampShader = dynamic_cast <QgsColorRampShader*>( myPseudoColorRenderer->shader ()->rasterShaderFunction () );
969+ if ( colorRampShader )
970+ {
971+ colorRampShader->classifyColorRamp ( myPseudoColorRenderer->band (), theExtent, myPseudoColorRenderer->input () );
972+ }
973+ }
974+ }
975+ else
976+ {
977+ myEnhancement->setMinimumValue ( min );
978+ myEnhancement->setMaximumValue ( max );
979+ myEnhancements.append ( myEnhancement );
980+ }
947981 }
948982 else
949983 {
@@ -1068,8 +1102,8 @@ void QgsRasterLayer::refreshRendererIfNeeded( QgsRasterRenderer* rasterRenderer,
10681102 }
10691103
10701104 QgsSingleBandPseudoColorRenderer* r = dynamic_cast <QgsSingleBandPseudoColorRenderer*>( renderer () );
1071- dynamic_cast <QgsSingleBandPseudoColorRenderer*>( renderer () ) ->setClassificationMin ( min );
1072- dynamic_cast <QgsSingleBandPseudoColorRenderer*>( renderer () ) ->setClassificationMax ( max );
1105+ r ->setClassificationMin ( min );
1106+ r ->setClassificationMax ( max );
10731107
10741108 if ( r->shader () )
10751109 {
0 commit comments