十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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); |
·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);
·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();
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。