zoukankan      html  css  js  c++  java
  • 在處理影像資料上,Qt提供了QPixmap、QBitmap、QImage與QPicture等類別。

    QPixmap、QBitmap、QImage 與 QPicture_墙角里的光线_百度空间

    QPixmap、QBitmap、QImage 與 QPicture
    2009-09-10 15:43
    在處理影像資料上,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();
  • 相关阅读:
    java8新特性学习五(接口中的默认方法与静态方法)
    java8新特性学习四(Optional类)
    [record]WebLogic域之创建-文本界面
    [转]java 关于httpclient 请求https (如何绕过证书验证)
    数组与串,串的实现,KMP,BF算法
    git
    nginx设置重写规则
    深入PHP 第三章笔记
    进程和线程
    JS 获取 iframe内元素,及iframe与html调用
  • 原文地址:https://www.cnblogs.com/lexus/p/2464594.html
Copyright © 2011-2022 走看看