首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Qt學習之路(29):四大繪圖設備詳解 QPixmap、QBitmap、QImage、QPicture

     編輯:關於C++

繪圖設備指繼承自 QPaintDevice 的子類別。Qt 提供四種:QPixmap、QBitmap、QImage、QPicture,各有優化導向:

  • QPixmap:針對螢幕顯示優化,依賴底層視窗系統繪圖引擎,跨平台顯示可能略有差異。
  • QBitmap:QPixmap 子類,色深固定為 1(黑白兩色),適合游標、筆刷等低儲存需求場景。
  • QImage:獨立於硬體的繪圖系統,支援像素級存取,跨平台顯示一致。
  • QPicture:記錄並重現 QPainter 命令序列,平台無關,可儲存為二進位元檔(meta-file),支援列印、PDF、SVG 等輸出。

QPixmap 與 QBitmap 對比

void PaintedWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pixmap("Cat.png");
    QBitmap bitmap("Cat.png");
    painter.drawPixmap(10, 10, 128, 128, pixmap);
    painter.drawPixmap(140, 10, 128, 128, bitmap);

    QPixmap pixmap2("Cat2.png");
    QBitmap bitmap2("Cat2.png");
    painter.drawPixmap(10, 140, 128, 128, pixmap2);
    painter.drawPixmap(140, 140, 128, 128, bitmap2);
}

測試兩張 PNG:Cat.png 白底無透明,Cat2.png 具透明背景。觀察差異:

  • 白色背景在 QBitmap 中消失(變透明)
  • 透明色在 QBitmap 中轉為黑色
  • 其他顏色以點陣疏密呈現(半色調效果)

QPixmap 提供 grabWidget()、grabWindow() 截圖功能,並支援隱式共享(傳值無需指標)。

QImage:像素級操作

可視為 RGB 二維陣列。範例建立 3×3 RGB32 影像,逐像素設定顏色值。適用於影像處理、像素演算、跨平台一致渲染。

QPicture:命令錄製與重現

// 錄製
QPicture picture;
QPainter painter;
painter.begin(&picture);
painter.drawEllipse(10, 20, 80, 70);
painter.end();
picture.save("drawing.pic");

// 重現
QPicture picture;
picture.load("drawing.pic");
QPainter painter;
painter.begin(&myImage);
painter.drawPicture(0, 0, picture);
painter.end();

QPicture 序列化 QPainter 命令,格式平台無關,無內容限制(字型、Pixmap、變換皆可記錄)。使用系統解析度並可調整 QPainter 消除裝置差異,適合列印、匯出向量圖等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved