QImage、QPixmap、QBitmap、QPicture 四个类
来源:互联网 发布:淘宝上罂粟壳叫什么 编辑:程序博客网 时间:2024/05/16 05:23
QImage是设计并优化来为 I/O操作的,可以直接访问和操作像素,而QPixmap是设计并优化来在屏幕上显示图片的。QBitmap仅是继承自QPixmap的一个方便使用的类,是为了确保图片的深度为1.QPicture是绘图设备,可以用来重现QPainte。
1、一个简单的图片显示程序(以下仅是部分程序段,相信大家会看明白)
QPixmap pixmap( "image.jpg" ); //image.jpg在程序的当前目录下。
PixmapLabel1->setPixmap(pixmap); //PixmapLabel1标签即可显示图片。
2、将QImage转换为QPixmap
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), QDir::currentPath());
if (!fileName.isEmpty())
{
QImage image(fileName); //定义QImage类。
if (image.isNull()) {
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot load %1.").arg(fileName));
return;
}
ui.label->setPixmap(QPixmap::fromImage(image)); 将QImage转换为QPixmap。
}
3、QImage的加载图片的方法(个人现只懂两种)
(1)、QImage image(fileName); //直接在QImage类的构造函数搞定,fileName是指应用程序的当前目录,相信大家能理解这里所说的当前目录。
(2)、 QImage image;image.load(fileName); //使用了load方法。
·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的显示
·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);
·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();
- QImage、QPixmap、QBitmap、QPicture 四个类
- QPixmap、QBitmap、QImage 、QPicture
- QPixmap,QBitmap,QImage,QPicture
- QPixmap、 QBitmap、QImage 與 QPicture
- QPixmap、QBitmap、QImage 與 QPicture
- QPixmap、QBitmap、QImage 與 QPicture
- QPixmap、QBitmap、QImage 与 QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture .
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture .
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Two implemations of the store procedure
- 新买的U盘显示被写保护了怎么回事?
- 编译Android源码和内核源码的归纳总结
- 如何在IOS中使用实现Android view.gone 功能(swift版)cell(两种不同的布局)
- iOS navigationcontroller中的back按钮的隐藏及右滑pop操作整理
- QImage、QPixmap、QBitmap、QPicture 四个类
- JAVA基础(22) web.xml配置详解一
- gradle学习笔记(五) Gradle初步理解
- Android中关于Volley的使用(十)对Request和Reponse的认识
- Spark1.6.0-Hadoop2.6配置过程
- 类与对象(2)封装
- mysql数据库的导入和导出
- iOS CADisplayLink 使用WSYFPSLabel监测程序FPS
- 零售户决策树分类