QPixmap/QImage/QPicture

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
QImage与Qpixmap的区别

1、QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的

2、QPixmap依赖于所在的平台的绘图引擎,故例如反锯齿等一些效果在不同的平台上可能会有不同的显示效果,QImage使用Qt自身的绘图引擎,可在不同平台上具有相同的显示效果

3、目前的Qt会把QPixmap都存储在graphics memory中,QImage是存储在客户端的,是独立于硬件的。在 X11, Mac 以及 Symbian平台上,QPixmap 是存储在服务器端,而QImage则是存储在客户端,在Windows平台上,QPixmap和QImage都是存储在客户端,并不使用任何的GDI资源。

4、由于QImage是独立于硬件的,也是一种QPaintDevice,因此我们可以在另一个线程中对其进行绘制,而不需要在GUI线程中处理,使用这一方式可以很大幅度提高UI响应速度。

5、QImage可通过setPixpel()和pixel()等方法直接存取指定的像素,Qt的文档中有如下例程:


QImage image(3, 3, QImage::Format_RGB32);

QRgb value;

value = qRgb(189, 149, 39);

image.setPixel(1, 1, value);

value = qRgb(122, 163, 39);

image.setPixel(0, 1, value);

image.setPixel(1, 0, value);

value = qRgb(237, 187, 51);

image.setPixel(2, 1, value);


QPixmap、QImage、QBitmap和QPicture - Elerao - Static Elerao

·QImage的显示

·QPainter中绘制QImage的接口原型:

void QPainter::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 )

其中x和y为绘制位置,sx和sy是指图像左上角的坐标,sw和sh是指定了图像的大小,如果都为0或负数,就显示完整个图像。

QImage image;

image.load( ":/pics/earth.png" );

QPainter painter(this);

painter.drawImage(0,0, image);

·当图片较大时,我们可以先通过QImage将图片加载进来,然后把图片缩放成需要的尺寸,最后转换成QPixmap 进行显示。

QImage image;

image.load( ":/pics/earth.png" );

QPainter painter(this);

QPixmap pixmapToShow = QPixmap::fromImage( image.scaled(size(), Qt::KeepAspectRatio) );

painter.drawPixmap(0,0, pixmapToShow);

·QBitmap与QPixmap

·QBitmap是QPixmap的一个子类,主要用于显示单色位图。用于制作游标QCursor或笔刷QBrush等,图像显示对比如下

QPixmap pixImg("caterpillar.jpg");

QBitmap bitImg("caterpillar.jpg");

QPainter painter(this);

painter.drawPixmap(0, 0, pixImg);

painter.drawPixmap(200, 0, bitImg);


QPixmap、QImage、QBitmap和QPicture - Elerao - Static Elerao

·QPicture

·QPicture则是一个绘图装置,用于记录和重播Qpainter的绘图指令。

·使用begin()方法在QPicture上进行绘图,使用end()结束绘图,使用save()保存至档案

QPicture picture;

QPainter painter;

painter.begin(&picture);

painter.drawRect(10, 20, 100, 50);

painter.end();

picture.save("draw_record.pic");

需重播绘图指令的话,新建一个QPicture对象,使用load()重新载入保存的档案,然后再在指定的绘图设备QDevice上绘制QPicture:

QPicture picture;

picture.load("draw_record.pic");

QPainter painter;

painter.begin(this);

painter.drawPicture(0, 0, picture);

painter.end();

新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

QImageQPixmap

QImageQPixmap都是可以用于显示图片的,但是有一些不同。比如说QPixmap是与硬件关联的,而QImage是硬件独立的。硬件关联的一个特点是不可以跨线程访问。就是说QImage可以单独的用线程加载,然后在另一个线程展示,而QPixmap不可以。 对这个硬件关联我没有这个概念,体会不深,但是在做图片多线程加载的时候,使用QPixmap吃了很多苦头。 1、QPixmap不可以使用在子线...

壁立千仞无欲则刚的博客 7575

QT-- out of memory, returning null image

程序崩溃闪退

我有一颗薄荷糖的博客 2840

Qt绘制云盘系列1

先抛出一个问题:QImage: out of memory, returning null image,下方错误示范效果图报出此错误,希望各位大佬们帮忙解决一下,在此先谢谢了! 工程链接-百度云链接:https://pan.baidu.com/s/1nccUlTPgZQc5QeP2bzczcw 提取码:akvt 错误示范效果图: 实际上应该是下方这个效果,但是由于QImage: out of m...

浮生流年的博客 2303

Qt中无法load big image的问题

1、在Qt中,当播放一些比较大的图片时,图片无法显示,出现:QImage: out of memory, returning null image 参考 http://www.developer.nokia.com/Community/Wiki/CS001500_-_Reading_big_images_in_Qt 可以解决此问题; 使用: QImageReader reader

寒江蓑笠的专栏 7106

QT 的点点滴滴

MinGw + CodeBlock + QT4.5类定义后面要加";"函数的实现部分,如果定义部分有void,则实现部分不能少;检查include文件有无少;error: request for member `show in `((MainWindow*)this)->MainWindow::rightform, which is of non-class type `R

紫侠的天空 7135

关于QPixmap/QImage/QPicture

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImageQPicture。其中,QPixmap专门为图像在屏幕上的显示做了优化,而QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImage专门为图像的像素

zzwdkxx的专栏 1万+

Qt图片绘图类QPixmap/QImage/QPicture

绘图设备是指继承QPaintDevice的子类,你可以使用QPainter直接在其上面绘制图形,Qt一共提供了四个这样继承QPaintDevice的绘图设备类,分别是QPixmap、QBitmap、QImageQPicture。其中: QPixmap专门为图像在屏幕上的显示做了优化; QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用 QPixmap的isQBitmap...

浩瀚之水的专栏 2415

Qt的4个图像类QImage/QPixmap/QBitmap/QPicture

(一)QPixmapQImage的区别 http://www.thisisqt.com/forum/viewthread.php?tid=267   QPixmap是专门为绘图而生,当需要绘制图片时你需要使用QPixmapQImage则是为I/O,为图片像素访问以及修改而设计的。如果你想访问图片的像素或是修改图片像素,则需要使用QImage,或者借助于QPainter来操作像素。另外跟Q

TJU355的专栏 1851

QT中用QLabel显示一张图像及QImage/QPixmap/QBitmap/QPicture

QT中用QLabel显示一张图像及QImage/QPixmap/QBitmap/QPicture 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwwsssZheRen/article/details/77848855 在QT中显示图像,是使用OpenCV联合QT进行机器视觉项目的开发的第一步。首先需要弄清楚的是QT的四个图像...

jinchengzhou的专栏 1591

Qt的4个图像类QImage/QPixmap/QBitmap/QPicture

原文地址:http://www.cnblogs.com/s_agapo/archive/2012/03/14/2395603.html (一)QPixmapQImage的区别 http://www.thisisqt.com/forum/viewthread.php?tid=267   QPixmap是专门为绘图而生,当需要绘制图片时你需要使用QPixmap。Q

JJM152768JJM的专栏 1445

(转)Qt的4个图像类QImage/QPixmap/QBitmap/QPicture

QPixmap是专门为绘图而生,当需要绘制图片时你需要使用QPixmapQImage则是为I/O,为图片像素访问以及修改而设计的。如果你想访问图片的像素或是修改图片像素,则需要使用QImage,或者借助于QPainter来操作像素。另外跟QImage不同是,QPixmap跟硬件是相关的,如X11, Mac 以及 Symbian平台上,QPixmap 是存储在服务器端,而QImage则是存储在客户...

weixin_30660027的博客 81

QT三大绘图类:QPixmap/QImage/QPicture

文章转载地址:http://blog.csdn.net/ycyzrenlifei/article/details/52709615 QPixmap QImage QPicture 以上都是QPaintDevice的子类   QPixmap 依赖硬件、加速显示、适合小图片 QPixmap的设计本来就是用来加速显示,用paint绘图时用QPixmap会比其他类的效果好很多。一般小图片...

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 4万+

QT的绘图类 QImage /QPixmap/QPicture

绘图设备是指继承QPaintDevice的子类,你可以使用QPainter直接在其上面绘制图形,Qt一共提供了四个这样继承QPaintDevice的绘图设备类,分别是QPixmap、QBitmap、QImageQPicture。其中: QPixmap专门为图像在屏幕上的显示做了优化; QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用 QPixmap的isQBitmap...

Mario_z的博客 906
上一篇: QT在ARM平台的移植(三)
下一篇: linux文件系统制作(一)
chyxwzn
博客等级 码龄14年 22粉丝 21原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值