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

用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日

悬赏问题

  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏
  • ¥15 STM32串口接收问题
  • ¥15 腾讯IOA系统怎么在文件夹里修改办公网络的连接
  • ¥15 filenotfounderror:文件是存在的,权限也给了,但还一直报错
  • ¥15 MATLAB和mosek的求解问题
  • ¥20 修改中兴光猫sn的时候提示失败
  • ¥15 java大作业爬取网页
  • ¥15 怎么获取欧易的btc永续合约和交割合约的5m级的历史数据用来回测套利策略?
  • ¥15 有没有办法利用libusb读取usb设备数据