void QgsRasterTransparencyWidget::syncToLayer() { if ( ! mRasterLayer->isValid() ) return; QgsRasterDataProvider *provider = mRasterLayer->dataProvider(); QgsRasterRenderer *renderer = mRasterLayer->renderer(); if ( provider ) { if ( provider->dataType( 1 ) == Qgis::ARGB32 || provider->dataType( 1 ) == Qgis::ARGB32_Premultiplied ) { gboxNoDataValue->setEnabled( false ); gboxCustomTransparency->setEnabled( false ); } cboxTransparencyBand->setShowNotSetOption( true, tr( "None" ) ); cboxTransparencyBand->setLayer( mRasterLayer ); mOpacityWidget->setOpacity( renderer->opacity() ); cboxTransparencyBand->setBand( renderer->alphaBand() ); } if ( mRasterLayer->dataProvider()->sourceHasNoDataValue( 1 ) ) { lblSrcNoDataValue->setText( QgsRasterBlock::printValue( mRasterLayer->dataProvider()->sourceNoDataValue( 1 ) ) ); } else { lblSrcNoDataValue->setText( tr( "not defined" ) ); } mSrcNoDataValueCheckBox->setChecked( mRasterLayer->dataProvider()->useSourceNoDataValue( 1 ) ); bool enableSrcNoData = mRasterLayer->dataProvider()->sourceHasNoDataValue( 1 ) && !std::isnan( mRasterLayer->dataProvider()->sourceNoDataValue( 1 ) ); mSrcNoDataValueCheckBox->setEnabled( enableSrcNoData ); lblSrcNoDataValue->setEnabled( enableSrcNoData ); QgsRasterRangeList noDataRangeList = mRasterLayer->dataProvider()->userNoDataValues( 1 ); QgsDebugMsg( QStringLiteral( "noDataRangeList.size = %1" ).arg( noDataRangeList.size() ) ); if ( !noDataRangeList.isEmpty() ) { leNoDataValue->insert( QgsRasterBlock::printValue( noDataRangeList.value( 0 ).min() ) ); } else { leNoDataValue->insert( QString() ); } populateTransparencyTable( mRasterLayer->renderer() ); }
void QgsRasterDataProvider::setUserNoDataValue( int bandNo, const QgsRasterRangeList &noData ) { if ( bandNo >= mUserNoDataValue.size() ) { for ( int i = mUserNoDataValue.size(); i < bandNo; i++ ) { mUserNoDataValue.append( QgsRasterRangeList() ); } } QgsDebugMsgLevel( QString( "set %1 band %1 no data ranges" ).arg( noData.size() ), 4 ); if ( mUserNoDataValue[bandNo - 1] != noData ) { // Clear statistics int i = 0; while ( i < mStatistics.size() ) { if ( mStatistics.value( i ).bandNumber == bandNo ) { mStatistics.removeAt( i ); mHistograms.removeAt( i ); } else { i++; } } mUserNoDataValue[bandNo - 1] = noData; } }