区块链技术博客
www.b2bchain.cn

QGIS实用技巧(三):保存图片之一求职学习资料

本文介绍了QGIS实用技巧(三):保存图片之一求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • 前言
  • 自带导出函数
  • 自带导出函数的局限性
  • 自己实现导出函数
    • 保存任意图元的图像

前言

QGIS 制作或者绘制好的图像如何导出图片呢?

本章将为你讲述如何将 QGIS 顺利导出图片。

自带导出函数

QgsMapCanvas 类自带了一个简单的导出图片功能,能够将当前窗口的内容保存成一张图片。

这个函数是 saveAsImage。它的原型如下:

//! Save the contents of the map canvas to disk as an image void saveAsImage( const QString &fileName, QPixmap *QPixmap = nullptr, const QString & = "PNG" );

使用方式也很简单,对于第 2、3 个参数可以忽略,第一个参数带一个文件路径名即可。例如:

saveAsImage("F:/test/test1.png");

自带导出函数的局限性

然而它的局限性也很明显,总结如下:

  • 它仅仅只能保存地图图层(例如如 shp、卫星影像 等图像层)的图像以及属于或集成于标注对象 QgsMapCanvasAnnotationItem 的图元图像。而对于其他派生于 QgsMapCanvasItem 或者 QGraphicsItem 对象的图元不会有任何保存。

  • 它仅仅只能保存当前窗口显示的内容;不能对窗口以外的图像或者任意区域内的图像进行保存。

  • 它仅仅只能以当前窗口地图比例尺保存图像,而不能是想要设置的任意比例尺。

对应的简单概扩就是:

  • 不能保存任意图元的图像
  • 不能保存任意区域的图像
  • 不能保存任意比例尺的图像

自己实现导出函数

根据上面的局限性,我们想要必须全部解决。
下面我们将逐一实现能够满足上面要求的功能的导出函数。

下面的代码,做一个前提假设。假设 QgsMapCanvas 派生类是 CMapCanvas (class CMapCanvas : public QgsMapCanvas)

保存任意图元的图像

由于 QgsMapCanvas 其本质就是派生于 QgsMapCanvas;并且所有的图元,其基类也是 QGraphicsItem

对此我们可以直接用其最原始的场景的渲染函数 render。代码如下:

bool CMapCanvas::saveImg(const QString&fileName) {     // 根据画布大小构建保存矩形     QSize sz = size();     QRectF rect(0, 0, sz.width(), sz.height());      // 构建 image 对象     QImage image(sz, QImage::Format_ARGB32);      // 构建绘制对象,并设置抗锯齿     QPainter painter(&image);     painter.setRenderHint(QPainter::Antialiasing);

  • 前言
  • 自带导出函数
  • 自带导出函数的局限性
  • 自己实现导出函数
    • 保存任意图元的图像

前言

QGIS 制作或者绘制好的图像如何导出图片呢?

本章将为你讲述如何将 QGIS 顺利导出图片。

自带导出函数

QgsMapCanvas 类自带了一个简单的导出图片功能,能够将当前窗口的内容保存成一张图片。

这个函数是 saveAsImage。它的原型如下:

//! Save the contents of the map canvas to disk as an image void saveAsImage( const QString &fileName, QPixmap *QPixmap = nullptr, const QString & = "PNG" );

使用方式也很简单,对于第 2、3 个参数可以忽略,第一个参数带一个文件路径名即可。例如:

saveAsImage("F:/test/test1.png");

自带导出函数的局限性

然而它的局限性也很明显,总结如下:

  • 它仅仅只能保存地图图层(例如如 shp、卫星影像 等图像层)的图像以及属于或集成于标注对象 QgsMapCanvasAnnotationItem 的图元图像。而对于其他派生于 QgsMapCanvasItem 或者 QGraphicsItem 对象的图元不会有任何保存。

  • 它仅仅只能保存当前窗口显示的内容;不能对窗口以外的图像或者任意区域内的图像进行保存。

  • 它仅仅只能以当前窗口地图比例尺保存图像,而不能是想要设置的任意比例尺。

对应的简单概扩就是:

  • 不能保存任意图元的图像
  • 不能保存任意区域的图像
  • 不能保存任意比例尺的图像

自己实现导出函数

根据上面的局限性,我们想要必须全部解决。
下面我们将逐一实现能够满足上面要求的功能的导出函数。

下面的代码,做一个前提假设。假设 QgsMapCanvas 派生类是 CMapCanvas (class CMapCanvas : public QgsMapCanvas)

保存任意图元的图像

由于 QgsMapCanvas 其本质就是派生于 QgsMapCanvas;并且所有的图元,其基类也是 QGraphicsItem

对此我们可以直接用其最原始的场景的渲染函数 render。代码如下:

bool CMapCanvas::saveImg(const QString&fileName) {     // 根据画布大小构建保存矩形     QSize sz = size();     QRectF rect(0, 0, sz.width(), sz.height());      // 构建 image 对象     QImage image(sz, QImage::Format_ARGB32);      // 构建绘制对象,并设置抗锯齿     QPainter painter(&image);     painter.setRenderHint(QPainter::Antialiasing);

  • 前言
  • 自带导出函数
  • 自带导出函数的局限性
  • 自己实现导出函数
    • 保存任意图元的图像

前言

QGIS 制作或者绘制好的图像如何导出图片呢?

本章将为你讲述如何将 QGIS 顺利导出图片。

自带导出函数

QgsMapCanvas 类自带了一个简单的导出图片功能,能够将当前窗口的内容保存成一张图片。

这个函数是 saveAsImage。它的原型如下:

//! Save the contents of the map canvas to disk as an image void saveAsImage( const QString &fileName, QPixmap *QPixmap = nullptr, const QString & = "PNG" );

使用方式也很简单,对于第 2、3 个参数可以忽略,第一个参数带一个文件路径名即可。例如:

saveAsImage("F:/test/test1.png");

自带导出函数的局限性

然而它的局限性也很明显,总结如下:

  • 它仅仅只能保存地图图层(例如如 shp、卫星影像 等图像层)的图像以及属于或集成于标注对象 QgsMapCanvasAnnotationItem 的图元图像。而对于其他派生于 QgsMapCanvasItem 或者 QGraphicsItem 对象的图元不会有任何保存。

  • 它仅仅只能保存当前窗口显示的内容;不能对窗口以外的图像或者任意区域内的图像进行保存。

  • 它仅仅只能以当前窗口地图比例尺保存图像,而不能是想要设置的任意比例尺。

对应的简单概扩就是:

  • 不能保存任意图元的图像
  • 不能保存任意区域的图像
  • 不能保存任意比例尺的图像

自己实现导出函数

根据上面的局限性,我们想要必须全部解决。
下面我们将逐一实现能够满足上面要求的功能的导出函数。

下面的代码,做一个前提假设。假设 QgsMapCanvas 派生类是 CMapCanvas (class CMapCanvas : public QgsMapCanvas)

保存任意图元的图像

由于 QgsMapCanvas 其本质就是派生于 QgsMapCanvas;并且所有的图元,其基类也是 QGraphicsItem

对此我们可以直接用其最原始的场景的渲染函数 render。代码如下:

bool CMapCanvas::saveImg(const QString&fileName) {     // 根据画布大小构建保存矩形     QSize sz = size();     QRectF rect(0, 0, sz.width(), sz.height());      // 构建 image 对象     QImage image(sz, QImage::Format_ARGB32);      // 构建绘制对象,并设置抗锯齿     QPainter painter(&image);     painter.setRenderHint(QPainter::Antialiasing);

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » QGIS实用技巧(三):保存图片之一求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们