文章目錄 前言 多波段彩色渲染 QGis設置為多波段彩色 二次開發代碼實現多波段彩色 總結
前言
介紹柵格圖層數據渲染之多波段彩色渲染 說明:文章中的示例代碼均來自開源項目qgis_cpp_api_apps
多波段彩色渲染
以“3420C_2010_327_RGB_LATLNG.tif”數據為例,在QGis中加載默認顯示為多波段彩色如下圖
QGis設置為多波段彩色
在圖層屬性的“Symbology”選項卡中選擇“Render type”為“Multiband color” 在“Red band”、“Green band”、“Blue band”中分別選擇紅、綠、藍的波段及其最小值和最大值范圍(也可以通過“Min / Max Value Settings”選項進行設置) 在“Contrast enhancement”中選擇對比度增強模式。 屬性設置完成后,圖層渲染效果如下圖
二次開發代碼實現多波段彩色
類QgsMultiBandColorRenderer
是多波段彩色渲染器,詳情見文檔,類圖如下 構造函數參數傳入dataProvider,紅綠藍三個波段的序號以及紅綠藍的增減對比度類
QgsMultiBandColorRenderer ( QgsRasterInterface * input, int redBand, int greenBand, int blueBand, QgsContrastEnhancement * redEnhancement = nullptr , QgsContrastEnhancement * greenEnhancement = nullptr , QgsContrastEnhancement * blueEnhancement = nullptr ) ;
void MainWindow::rasterMultibandSlot()
{//添加測試圖層QgsRasterLayer *layer = addTestRaster("maps/raster/3420C_2010_327_RGB_LATLNG.tif");double minValue = 0;double maxValue = 0;minMaxValuesForBand( 1, layer->dataProvider(), minValue, maxValue );QgsContrastEnhancement *rce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( 1 ) ) );rce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);rce->setMinimumValue(minValue);rce->setMaximumValue(maxValue);minMaxValuesForBand( 2, layer->dataProvider(), minValue, maxValue );QgsContrastEnhancement *gce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( 2 ) ) );gce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);gce->setMinimumValue(minValue);gce->setMaximumValue(maxValue);minMaxValuesForBand( 3, layer->dataProvider(), minValue, maxValue );QgsContrastEnhancement *bce = new QgsContrastEnhancement( ( Qgis::DataType )(layer->dataProvider()->dataType( 3 ) ) );bce->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum);bce->setMinimumValue(minValue);bce->setMaximumValue(maxValue);QgsMultiBandColorRenderer *renderer = new QgsMultiBandColorRenderer(layer->dataProvider(),1,2,3,rce,gce,bce);//設置layer的屬性layer->setBlendMode(QPainter::CompositionMode_SourceOver);layer->setRenderer(renderer);
}
效果如下圖
總結