QBitmap 單色圖片

QBitmap表示一種只有黑白的單色圖片,類似於mfc中的位圖。該類主要用於創建自定義的光標和畫刷對象,以及創建區域對象和爲某個空間設置掩碼圖片。

QBitmap派生自QPixmap類,它的顏色深讀爲1。當然,空的QBitmap對象的顏色深度爲0。所以,如果我們將一個顏色深度大於1的圖片賦值給bitmap,bitmap會自動發生抖動,將圖片顏色變爲黑白色。

當然,我們也可以單獨創建一個QBitmap對象,然後使用Qt::color0和Qt::color1對它進行填充。其中,使用Qt::color0會將QBitmap的所有位置0,Qt::color1則會將QBitmap的所有位置1。而對一個位圖來說,0代表背景(或透明像素),1代表前景(或不透明像素)。當然,我們還可以使用該類的成員函數clear()將QBitmap對象的所有位置爲Qt::color0。

但要注意的是,使用Qt::black 和 Qt::white是沒有意義的,因爲QColor::pixel()不一定是用0表示黑色,用1表示白色的。

另外,QBitmap還提供了兩個常用的靜態方法。fromData()可以用一個uchar數組來構建一個QBitmap對象,所以我們可以先把一個圖片使用QFile讀到內存中,然後使用該方法構建出一個QBitmap對象;而另一個fromImage()則提供了將一個QImage轉換成QBitmap的方法。

下面,我們寫一個簡單的例子,將一張圖片分別以QBitmap和QPixmap的形式繪製到窗口上,來看一下它們的效果和區別。

新建一個GUI程序,將準備好的一張圖片作爲資源添加到工程中,然後,重寫窗口類的paintEvent(QPaintEvent*)方法,進行繪圖。

代碼如下:

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QBitmap bitmap(":/1.png");
    QPixmap pixmap(":/1.png");
    painter.drawPixmap(0, 0, rect().width()/2, rect().height(), bitmap);
    painter.drawPixmap(rect().width()/2, 0, rect().width()/2, rect().height(), pixmap);
}
我使用同一張圖片分別構建了一個QBitmap對象和一個QPixmap對象,然後將它們並排繪製窗口中。

運行結果如下:

可以看到,當我們用一副彩色圖片來構建QBitmap對象時,QBitmap會自動發生抖動將圖片變爲了黑白色。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章