Qt 绘图设备,QPixmap 和QImage 相互转化

Qt的绘图系统允许使用相同的API在屏幕和其他打印设备上进行绘制。整个绘图系统基于 QPainter,QPainterDevice 和 QPaintEngine三个类。

QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的时间;QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。QPaintEngine类应用于QPainter和QPaintDevice之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关心QPaintEngine这个类的。我们可以把QPainter理解成画笔;把QPaintDevice理解成使用画笔的地方,比如纸张、屏幕等;而对于纸张、屏幕而言,肯定要使用不同的画笔绘制,为了统一使用一种画笔,我们设计了QPaintEngine类,这个类让不同的纸张、屏幕都能使用一种画笔。

如图,明确标明了这三个类之间的层次关系:

Qt 的绘图系统实际上是,使用QPainter在QPainterDevice上进行绘制,他们之间使用QPaintEngine 进行通讯(也就是翻译QPainterDevice的指令)。


绘图设备

QPixmap:专门为图像在屏幕上的显示做了优化

QBitmap:是QPixmap的一个子类,它的色深限定为1,可以使用QPixmap的 isQBitmap() 函数来确定这个QPixmap是不是一个QBitmap。

QImage:专门为图像的像素级访问做了优化

QPicture:则可以记录和重视QPainter的各种命令

/* Widget.h */

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

//重写paintEvent()函数
protected:
    void paintEvent(QPaintEvent *event);

private:
    Ui::Widget *ui;
};
/* Widget.cpp */

void Widget::paintEvent(QPaintEvent *event)
{


    QPainter p(this);

    QPixmap pixmap;
    pixmap.load("../Image/face.png");

    //QPixmap -> QImage
    QImage tempImage = pixmap.toImage();
    p.drawImage(0,0,tempImage);


    QImage image;
    image.load("../Image/face.png");

    //QImage -> QPixmap
    QPixmap tempPixmap = QPixmap::fromImage(image);
    p.drawPixmap(200,0,tempPixmap);

}

 

你可能感兴趣的:(Qt)