Qt4 Gossip: QPixmap、QBitmap、QImage 與 QPicture

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
在處理影像資料上,Qt提供了QPixmap、QBitmap、QImage與QPicture等類別。

QPixmap繼承了QPaintDevice,您可用以建立QPainter並於上進行繪圖,您也可以直接指定圖案載入Qt所支援的圖檔,像是BMP、GIF、JPG、JPEG、PNG等,並使用QPainter的drawPixmap()繪製在其它的繪圖裝置上。您可以在QLabel、QPushButton上設定QPixmap以顯示圖像。QPixmap是針對螢幕顯示圖像而設計並最佳化,依賴於所在平台的原生繪圖引擎,所以一些效果的展現(像是反鋸齒
),在不同的平台上可能會有不一致的結果。

QBitmap是QPixmap的子類別,提供單色圖像,可用於製作游標(QCursor)或筆刷(QBrush)物件。下面的程式載入相同的圖檔,以觀看QPixmap與QBitmap的呈現效果:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QBitmap>

class PainterWidget : public QWidget {
protected:
    void paintEvent(QPaintEvent*);
};

void PainterWidget::paintEvent(QPaintEvent *event) {
    QPixmap pixImg("caterpillar.jpg");
    QBitmap bitImg("caterpillar.jpg");
    QPainter painter(this);
    painter.drawPixmap(0, 0, pixImg);
    painter.drawPixmap(200, 0, bitImg);
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    PainterWidget pWidget;
    pWidget.setWindowTitle("QPixmap & QBitmap");
    pWidget.resize(400, 150);
    pWidget.show();
    
    return app.exec();
}

執行後的結果如下圖所示:



QPixmap使用平台的繪圖引擎,在不同的平台所呈現的效果不一,無法提供個別像素的存取,QImage使用Qt自身的繪圖引擎,可提供在不同平台上相同的圖像呈現效果,並可透過setPixpel()、pixel()等方法,直接存取指定的像素,例如在Qt的QImage文件中,就有提供以下的範例:

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

 value = qRgb(189, 149, 39); // 0xffbd9527
 image.setPixel(1, 1, value);

 value = qRgb(122, 163, 39); // 0xff7aa327
 image.setPixel(0, 1, value);
 image.setPixel(1, 0, value);

 value = qRgb(237, 187, 51); // 0xffedba31
 image.setPixel(2, 1, value);

QPicture則是個繪圖裝置,可以記錄並重播QPainter的繪圖指令,您可以使用QPainter的begin()方法,指定在QPicture上進行繪圖,使用end()方法結束繪圖,使用QPicture的save()方法將QPainter所使用過的繪圖指令存至檔案,例如:
QPicture picture;
QPainter painter;
painter.begin(&picture);
painter.drawRect(10, 20, 100, 50);
painter.end();
picture.save("draw_record.pic");

要重播繪圖指令的話,建立一個QPicture,使用load()方法載入繪圖指令的檔案,然後在指定的繪圖裝置上繪製QPicture:
QPicture picture;
picture.load("draw_record.pic"); 
QPainter painter;
painter.begin(this);
painter.drawPicture(0, 0, picture);
painter.end();
新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

QPixmap: Must construct a QGuiApplication before a QPixmap原因及解决方案

QPixmap: Must construct a QGuiApplication before a QPixmap原因及解决方案

FreeLikeTheWind的博客 3085

QT QPixmapQBitmapQImage

QPixmapQBitmapQImageQPicture 2009-09-10 15:43 在處理影像資料上,Qt提供了QPixmapQBitmapQImageQPicture等類別。 QPixmap繼承了QPaintDevice,您可用以建立QPainter並於上進行繪圖,您也可以直接指定圖案載入Qt所支援的圖檔,像是BMP、GI

专注的力量 3269

QPixmap失败(Must construct a QGuiApplication before a QPixmap

Must construct a QGuiApplication before a QPixmap 这些步骤应该可以帮助你解决这个问题。如果问题仍然存在,请确保你的代码正确地初始化了 Qt 库,并且上下文环境设置正确。在使用 Qt 的图形相关类之前,需要先创建一个应用程序对象,例如。请注意,如果你使用的是 Qt Quick 或 QML,请使用。虚要用户初始化QGuiApplication。,以确保正确的初始化和上下文环境。来创建你的应用程序对象,而不是。QPixmap运行崩溃。这个错误是因为在创建。

啊渊的专栏 2639

QPixmap

一、描述 Qt 提供了四个用于处理图像数据的类: QImage 是为 I/O 以及直接像素访问和操作而设计和优化的。 QPixmap 是为在屏幕上显示图像而设计和优化的。 QBitmap是一个继承QPixmap的便利类,保证深度为1。如果QPixmap对象确实是位图,isQBitmap()函数返回true,否则返回false。 QPicture 类是一个绘制设备,用于记录和重放 QPainter 命令。 QPixmap 对象可以通过值传递,因为 QPixmap 类使用隐式数据共享。QPixmap

友善啊,朋友的博客 2万+

QT 绘图设备之QPixmapQBitmapQImageQPicture

QT 绘图设备之QPixmapQBitmapQImageQPicture

路过的熊的博客 1110

Qt4个图像类QImage/QPixmap/QBitmap/QPicture

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

nolatestudy的专栏 2万+

Qt-QPixmap

Qt-QPixmap

m0_73443478的博客 3786

QBitmap

一、描述 QBitmap 是一个 QPixmap 子类,非空图像深度固定为 1,即位图。如果将深度大于 1 的像素图分配给位图,位图将自动抖动。 和 QPixmap 类一样,QBitmap 通过使用隐式数据共享进行了优化。 在 QBitmap 对象(或深度为 1 的 QPixmap 对象)上绘图时,使用 QColor 对象 Qt::color0和 Qt::color1: 使用 Qt::color0 绘画将位图位设置为 0。 使用 Qt::color1 绘画将位设置为 1。 对于位图: 0 位表示

友善啊,朋友的博客 2087

QPixmap: Must construct a QGuiApplication before a QPixmap

QPixmap: Must construct a QGuiApplication before a QPixmap 错误解决方法 常见QPixmap: Must construct a QGuiApplication before a QPixmap或者QWidget: Must construct a QApplication before a QPaintDevice通常在VS调用QT或者O...

KLNSDFHUASF的博客 4674

QPixmap图像处理详解

本文详细介绍了Qt图形处理中两个关键类:`QPixmap` 和 `QImage`。`QPixmap` 用于在Qt应用程序中显示图像、图标和背景,适合用于在界面元素上绘制图像,提供了方便的界面显示接口。另一方面,`QImage` 是一个更底层的图像类,提供了像素级别的操作、格式转换等功能,适用于复杂的图像处理需求。文章详细介绍了`QPixmap` 的图像加载、保存、绘制图标等基本操作,同时也介绍了`QImage` 的转换、像素级别操作等高级功能。通过本文,读者将了解到这两个类的区别、适用场景,并学会如何优化.

啊渊的专栏 1万+

图像处理QPixmap、Picture、QBitmap

QPixmap 类是一种可用作绘制设备的屏幕外图像表示形式。QPixmap可以使用QLabel或QAbstractButton的子类之一可以轻松显示在屏幕上QPixmap 对象可以按值传递,因为 QPixmap 类使用隐式数据共享,也可以流式传输。

qq_45303986的博客 3649

qt QBitmap详解

QBitmapQt框架中的一个类,它继承自QPixmap,并专门用于处理单色(1位深)图像。由于QBitmap只使用1位来表示每个像素(通常是黑色和白色),因此它非常适合用于创建掩码(mask)图像,这些图像通常用于在图形界面中实现特定的视觉效果,如透明区域、窗口形状定义等。QBitmap支持基本的图像操作,如绘制、转换和保存,但由于其单色特性,它的一些方法和功能相比QPixmapQImage来说更为有限。

ckg3824278的博客 635

qt QPixmap详解

QPixmapQt框架中用于处理图像的一个类。它提供了对图像文件(如PNG、JPG、BMP等)的加载、保存、绘制和转换功能。QPixmap主要存储在设备内存中,因此适用于需要频繁访问和绘制的图像,如游戏中的精灵图、界面背景等。QPixmap支持多种图像格式,并提供了丰富的API来操作这些图像。

ckg3824278的博客 1124

Qt 常用类 (7)—— QPixmap

QPixmap 类代表图像,实现在 QtGui 共享库中。       构造       以下构造函数生成的 QPixmap 对象为空图像: [plain] view plaincopy QPixmap();     // 构造一个大小为 0 的空图像         以下构造函数生成大小的 QPixmap 对象,但图像数据

Suger Mike的博客 3065

Qt】四种绘图设备详细使用

- QPixmap无法提供像素级别的操作———使用底层平台的绘制系统进行绘制 - QImage提供了像素级别的操作———使用独立于硬件的绘制系统,实际上是自己绘制自己,并且能够在不同系统之上提供一个一致的显示形式。

weixin_52958292的博客 1949

QT Qbitmap的基本使用

#include "widget.h" #include "ui_widget.h" #include<QBitmap> #include<QPainter> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); QBitmap bp(200,200); QPainter p(&bp); p.

m0_58327532的博客 1156

QtQPixmap 函数的使用指南

QtQPixmap 函数的使用指南

qq_46017342的博客 7938
上一篇: 实现Drag and Drop的最简模型
下一篇: Drag Drop
wangkuiyun
博客等级 码龄18年 21粉丝 30原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值