CPJD 2023-12-09 18:05 采纳率: 33.3%
浏览 5
已结题

用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色

这是源代码,是黑白的。

void TinyGIS::on_actionAdd_Raster_Layer_triggered()
{
    const QStringList& fileNames = QFileDialog::getOpenFileNames(this, tr("Add raster layer"), QString(), QString("GTiff(*.tif;*.tiff)"));

    if (fileNames.isEmpty())
    {
        return;
    }

    //QSignalBlocker signalBlocker(Project::instance()->layerTree());
    for (const QString& fileName : fileNames)
    {
        QFileInfo fileInfo(fileName);
        QgsRasterLayer* layer = new QgsRasterLayer(fileName, fileInfo.baseName());

        Project::instance()->addLayer(layer);// 加载栅格图层
    }

    refreshMapCanvas();
    addLog(tr("Open Raster layer successfully."));
}

void TinyGIS::refreshMapCanvas()
{
    m_mapCanvas->setLayers(Project::instance()->layerTree()->checkedLayers());
    m_mapCanvas->refresh();
}

void TinyGIS::refreshMapCanvas()
{
    m_mapCanvas->setLayers(Project::instance()->layerTree()->checkedLayers());
    m_mapCanvas->refresh();
}

这个是黑白效果

img

  • 写回答

13条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-09 20:03
    关注

    【以下回答由 GPT 生成】

    问题标题: 如何使用QT进行QGIS二次开发,在添加栅格图层时将黑白的矢量图渲染为彩色?

    问题内容:

    要将黑白的矢量图渲染为彩色图层,可以通过使用QgsSingleBandPseudoColorRenderer类来实现。以下是修改后的代码:

    void TinyGIS::on_actionAdd_Raster_Layer_triggered()
    {
        const QStringList& fileNames = QFileDialog::getOpenFileNames(this, tr("Add raster layer"), QString(), QString("GTiff(*.tif;*.tiff)"));
    
        if (fileNames.isEmpty())
        {
            return;
        }
    
        for (const QString& fileName : fileNames)
        {
            QFileInfo fileInfo(fileName);
            QgsRasterLayer* layer = new QgsRasterLayer(fileName, fileInfo.baseName());
    
            // 创建伪彩色渲染器
            QgsSingleBandPseudoColorRenderer* renderer = new QgsSingleBandPseudoColorRenderer(layer->dataProvider(), 1);
    
            // 设置渲染器的颜色样式
            renderer->setColorRampType(QgsColorRampShader::Continuous);
            QgsColorRampShader* colorRampShader = new QgsColorRampShader();
            colorRampShader->setColorRampType(QgsColorRampShader::Interpolated);
            colorRampShader->setColorRampAlgorithm(QgsColorRampShader::Exact);
    
            // 添加适当的颜色渐变
            QList<QgsColorRampShader::ColorStop> colorStops;
            colorStops << QgsColorRampShader::ColorStop(0.0, QColor("black"), "");
            colorStops << QgsColorRampShader::ColorStop(1.0, QColor("white"), "");
            colorRampShader->setColorRampStops(colorStops);
    
            renderer->setShader(colorRampShader);
            layer->rendererTreeRoot()->addRenderer(renderer);
    
            Project::instance()->addLayer(layer);   // 加载栅格图层
        }
    
        refreshMapCanvas();
        addLog(tr("Open Raster layer successfully."));
    }
    

    这个修改后的代码将使用QgsSingleBandPseudoColorRenderer来创建伪彩色渲染器,并设置颜色样式为连续的伪彩色。这里使用的渐变色是从黑色到白色的渐变。注意,你可以根据自己的需求修改渐变颜色和样式。

    请注意,这只能用于单波段的栅格图层,如果需要处理多波段的栅格图层,请使用QgsMultiBandColorRenderer类。

    希望这可以帮助到你!如果还有其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月12日
  • 创建了问题 12月9日

悬赏问题

  • ¥50 关于#微信小程序#的问题:微信小程序支持h5实现webrtc h264 h265低延迟传输渲染,能付费帮我们解决一下吗
  • ¥20 请问ansys License manager 这个问题如何解决
  • ¥15 memory.limit()' is no longer supported
  • ¥15 基于stm32f4产生两路pwm信号并可由串口通信调节
  • ¥15 C++/QT设置函数调用条件(多个功能调用同一,且各自调用条件不同)
  • ¥15 UE5样条线生成的网格UV问题
  • ¥15 如何用最短的时间大致看懂springboot+vue的项目
  • ¥15 (有偿)懂数值分析和含时变参数微分方程的来
  • ¥15 abaqus随机生成二维颗粒
  • ¥15 安装ansys许可证管理器时出现了这个问题,如何解决?