QT Q Image QPixmap ·QBitmap 三者区别
admin
2023-08-03 02:40:08
0

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 p_w_picpath(3, 3, QImage::Format_RGB32);

QRgb value;

value = qRgb(189, 149, 39);

p_w_picpath.setPixel(1, 1, value);

value = qRgb(122, 163, 39);

p_w_picpath.setPixel(0, 1, value);

p_w_picpath.setPixel(1, 0, value);

value = qRgb(237, 187, 51);

p_w_picpath.setPixel(2, 1, value);



QT Q Image  QPixmap  ·QBitmap 三者区别




·QImage的显示


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


void QPainter::drawImage ( int x, int y,

const QImage & p_w_picpath,

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 p_w_picpath;

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


QPainter painter(this);

painter.drawImage(0,0, p_w_picpath);


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


QImage p_w_picpath;

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


QPainter painter(this);

QPixmap pixmapToShow = QPixmap::fromImage( p_w_picpath.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);



QT Q Image  QPixmap  ·QBitmap 三者区别


·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();


相关内容

热门资讯

受“巴威”影响,上海两机场计划... 记者从上海机场了解到,受今年第9号台风“巴威”影响,12日上海浦东机场和虹桥机场通行能力将出现下降,...
电科蓝天获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示电科蓝天(688818)新获得一项发明专利授权,专利名为“一种...
最具性价比天玑9500旗舰手机... 早年前大家很抵触联发科的芯片,甚至调侃“一核有难,八核围观”,但现在不同了,联发科芯片的实力大增,市...
复盘六蓝水库险情:面对极端暴雨... 这次广西的灾情当中,最让人揪心的,是横州市六蓝水库的漫坝和溃口。这座水坝,是一座典型的均质土坝,六十...
“巴威”登陆≠危险解除,强降雨... 今天(7月11日)23时20分前后,今年第9号“巴威”以台风级在浙江省玉环市坎门街道沿海登陆,成为今...
天津大学团队为铂族催化剂精准制... IT之家 7 月 11 日消息,天津大学宣布,该校研究团队开创性地提出了“瞬态组装”策略,研发出毫秒...
从外卖到房产中介:永阳科技多行... 数字化转型已不是“做不做”的问题,而是“如何做”的问题。苏州永阳网络科技有限公司凭借对多个垂直行业的...
换车计划怎样估算购车决策更关键... 换车是很多车主都会面临的决策,而如何科学地估算并做出更关键的购车决策,是需要综合考量多方面因素的。 ...
换2辆电车亏8万!终于明白:家... 说实话:现在好多人买车,都被“一步到位”这四个字给忽悠惨了。 尤其是这两年电车越来越普及,大家选车...
美国非常震动!中国追上来的脚步... 长征十号乙运载火箭周五实现一子级可控回收,在国际上引起巨大震动。航天的第一基础是进入太空的运载能力,...