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