阅读本文大概需要 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大小区域进行了绘制

最新文章

  1. MariaDB 双主复制的配置
  2. iOS 适配https(AFNetworking3.0为例)
  3. MySQL wamp密码修改
  4. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)
  5. PHP curl超时问题
  6. MongoDB安装部署(一)
  7. .NET 代码编译过程
  8. 源码安装extundelete以及对遇到问题的解决
  9. Liunx常用的特殊环境变量
  10. 51nod贪心算法入门-----活动安排问题2
  11. in 与 = 的区别
  12. 多线程编程 - GCD(转)
  13. Ubuntu12.04password正确 入口的桌面(测试的恢复正常)
  14. 基于AFN封装的带缓存的网络请求
  15. C#多线程的用法4-线程间的协作lock快捷方式
  16. 【转载】Java性能优化之JVM GC(垃圾回收机制)
  17. Perl数据序列化和持久化(入门):Storable模块
  18. python调用opencv库教程
  19. LaTeX参考文献出现问号
  20. NodeJS学习:搭建私有NPM

热门文章

  1. Hexo使用思维导图插件
  2. Docker(二):Docker镜像仓库Harbor搭建
  3. Java NIO网络编程demo
  4. Java后端使用socketio,实现小程序答题pk功能
  5. Python高级语法-多继承MRO相关-多继承顺序(4.5.1)
  6. C++模板元编程----快速排序
  7. MyBatis 与 Spring 的完美整合方法
  8. Google、Facebook等均开始支持的HTTP3到底是个什么鬼?
  9. 【剑指offer】03 从尾到头打印链表
  10. C# 数组 ArrayList List<T>区别