Qt中QPainter提供了绘制图像的API,极大地方便了我们对图像的绘制。

Qt中提供了QPixmap, QBitmap,QBitMapQImage,QPicture等图像绘图设备,它们的类关系如下图所示:

QPixmap继承了QPaintDevice,您可用以建立QPainter并于上进行绘图,您也可以直接指定图案加载Qt所支持的图档,像是BMP、GIF、JPG、JPEG、PNG等,并使用QPainter的drawPixmap()绘制在其它的绘图装置上。您可以在QLabel、QPushButton上设定QPixmap以显示图像。QPixmap是针对屏幕显示图像而设计并最佳化,依赖于所在平台的原生绘图引擎,所以一些效果的展现(像是反锯齿),在不同的平台上可能会有不一致的结果。

QBitmap是QPixmap的子类别,提供单色图像,可用于制作光标(QCursor)或笔刷(QBrush)物件。

QPixmap使用平台的绘图引擎,在不同的平台所呈现的效果不一,无法提供个别像素的存取,QImage使用Qt自身的绘图引擎,可提供在不同平台上相同的图像呈现效果,并可透过setPixpel()、pixel()等方法,直接存取指定的像素。

QPicture则是个绘图装置,可以记录并回放QPainter的绘图指令,您可以使用QPainter的begin()方法,指定在QPicture上进行绘图,使用end()方法结束绘图,使用QPicture的save()方法将QPainter所使用过的绘图指令存至档案

QPainter绘图引擎提供了drawImage、drawPicture和drawPixmap三类重载API。

drawImage类API支持绘制正常大小和自适应大小两种图片显示模式;

drawPicture类API支持绘制正常大小图片显示模式,主要用于回放QPainter的绘制;

drawPixmap类API支持绘制正常大小和自适应大小两种图片显示模式;

drawTiledPixmap提供了平铺显示模式。

综上,使用QPixmap结合QPainter可以绘制正常大小、自适应大小和平铺三种模式。

1、在指定位置绘制 pixmap,pixmap 不会被缩放

/* pixmap 的左上角和 widget 上 x, y 处重合 */

void QPainter::drawPixmap(int x, int y, const QPixmap & pixmap)

void QPainter::drawPixmap(const QPointF &point, const QPixmap &pixmap)

2、指定的矩形内绘制 pixmap,pixmap 被缩放填充到此矩形内

/* target 是 widget 上要绘制 pixmap 的矩形区域 */

void QPainter::drawPixmap(int x, int y, int width, int height, const QPixmap &pixmap)

void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap)

3、绘制 pixmap 的一部分,可以称其为 sub-pixmap(剪切大小)

/* source 是 sub-pixmap 的 rectangle */

void QPainter::drawPixmap(const QPoint &point, const QPixmap &pixmap, const QRect &source)

void QPainter::drawPixmap(const QRect &target, const QPixmap &pixmap, const QRect &source)

void QPainter::drawPixmap(int x, int y, const QPixmap &pixmap, int sx, int sy, int sw, int sh)

4、平铺绘制 pixmap,水平和垂直方向都会同时使用平铺的方式

void QPainter::drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &position = QPoint())

void QPainter::drawTiledPixmap(int x, int y, int width, int height, const QPixmap & pixmap, int sx = 0, int sy = 0)

测试代码:

C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
painter->setRenderHint(QPainter::Antialiasing);
QRectF target(-m_size / 2, -m_size / 2, m_size, m_size);
QRectF source(0.0, 0.0, 128.0, 128.0);
QRectF clipSource(0.0, 0.0, 100.0, 100.0);
QPixmap pixmap(":/image/qt-rocket.png");
// 自适应
painter->drawImage(target, image, source);
// 正常大小
painter->drawImage(QPointF(-m_size / 2, -m_size / 2), image, source);
// 子大小
painter->drawImage(QPointF(-m_size / 2, -m_size / 2), image, clipSource);
// 平铺
painter->drawTiledPixmap(target, pixmap);

转载于:https://www.cnblogs.com/MakeView660/p/11225445.html

QPainter绘制图片填充方式(正常大小、剪切大小、自适应大小、平铺)相关推荐

  1. html 图片 填充方式,聊聊CSS背景图片的几种填充类型

    因为今天刚刚开了blog,作为一个前端designer,就想自己设计自己的Blog样式,看着也舒心. 在设计的过程中第一步就是先排版构建框架,后利用CSS对各个块进行定位.不过各个样式的id和clas ...

  2. html 图片 填充方式,css怎么让图片填满?

    在css中,可以将div的高度和宽度属性设置为100%,同时使用background-size属性设置背景图片为100%,便可以实现背景图片铺满屏幕. css怎么让图片填满? 1.新建一个HTML文件 ...

  3. QPainter绘制自定义大小的图片

    QPainter绘制图片使用drawPixmap接口,qt提供了两种绘制方式,接口如下: 1.第一种,传入绘制点位,即为图片左上角定位点,图片有多大就绘制多大,若需要修改图片大小,可采用QPixmap ...

  4. 音视频开发之旅(一)三种方式绘制图片

    在android开发中我们最常使用的绘制图片的方式就是ImageView,设置src.那么有没有其他方案可以实现图片的绘制呐? 三种方案 通过Imageview设置setImageBitmap fin ...

  5. 音视频开发(一):三种方式绘制图片

    在android开发中我们最常使用的绘制图片的方式就是ImageView,设置src.那么有没有其他方案可以实现图片的绘制呐? 三种方案 通过Imageview设置setImageBitmap fin ...

  6. 音视频开发系列(26)三种方式绘制图片-android开发

    在android开发中我们最常使用的绘制图片的方式就是ImageView,设置src.那么有没有其他方案可以实现图片的绘制呐? 三种方案 通过Imageview设置setImageBitmap fin ...

  7. Android 图片平铺实现方式

    2019独角兽企业重金招聘Python工程师标准>>> Android 框架允许创建一个 drawable 包含一个 bitmap 并用于平铺.缩放和对齐处理.当我们需要让背景使用下 ...

  8. Flex 4中组件背景设置(填充方式)group为例子

    以下以Group为例子讲述如何在Flex 4中填充背景颜色.图片:1.图片填充方式:<s:Group x="0" y="0" height="1 ...

  9. android xml 平铺,Android 图片平铺实现方式

    Android 框架允许创建一个 drawable 包含一个 bitmap 并用于平铺.缩放和对齐处理.当我们需要让背景使用下面图片进行平铺时: 1)第一种利用系统提供的api实现 Bitmap bi ...

最新文章

  1. 【BZOJ】1034: [ZJOI2008]泡泡堂BNB(贪心)
  2. 编程命名中的7+1个提示
  3. P5012-水の数列【并查集,RMQ】
  4. 批处理Delims的基本知识
  5. ado 阿里云 mysql_ADO 操作数据库(一)--Ado简介
  6. NOSQL数据库大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase
  7. 基于Python的西瓜数据集 3.0α的SVM实现
  8. RocketMQ 源码分析 14 事务消息02
  9. 问的书写规则是什么意思_汉字笔顺的书写规则是什么
  10. 华为HCIE证书含金量
  11. 百词斩和扇贝单词 背单词功能模块测试
  12. 达人评测 3050和3050ti有啥区别 rtx3050和rtx3050ti选哪个好
  13. OpenCasCade 教程-瓶子 (1)
  14. KubeVela解读
  15. nuxt框架Universal和Spa两种render mode的区别
  16. SAP CRM BOL编程基础,代码+详细注释
  17. GC5958三相无刷(BLDC)无感正弦波电机驱动芯片 替代APX9358
  18. Linux的时区修改方法
  19. 基于matlab的多径信道的仿真
  20. 区块链网络安全(区块链网络安全论文)

热门文章

  1. 配置阿里云code的ssh
  2. YOLO微信小程序实践
  3. Matlab中的函数
  4. 辽宁大学计算机调剂复试,保护第一志愿有多重要?8所保护一志愿的考研院校,报考不吃亏!...
  5. 小波变换系数计算实例_小波变换原理与基本案例分析
  6. 数字化改变生活,数字化具有什么意义?
  7. 课程设计-图书信息管理系统
  8. HNUCM2022年天梯赛选拔赛第1场
  9. webots和ros2笔记03-解析
  10. 中国首次发布火星全球影像图,2030年前后将实现载人登月---转自百度新闻|北京日报客户端