1. 程式人生 > 其它 >QT繪圖裝置(QPixmap,QImage,QPicture)

QT繪圖裝置(QPixmap,QImage,QPicture)

技術標籤:Qtqt

QPixmap:針對螢幕進行優化了,和平臺相關,不能對圖片修改
QImage:和平臺無關,可以對影象進行修改,線上程中繪圖
QPicture:儲存繪圖的狀態(二進位制檔案)

QPixmap轉換為QImage
QImage tempImage = pixmap.toImage();

QImage 轉換為QPixmap
QPixmap temppixmap = QPixmap::fromImage(image);

eg:

QPixmap:
#include "widget.h"
#include "ui_widget.h"
#include
<QPainter>
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //繪圖裝置 QPixmap pixmap(500,500);//畫布 QPainter p(&pixmap); //填充背景 p.fillRect(0,0,500,500,QBrush(Qt::white)); //或者pixmap.fill(Qt::white); p.drawPixmap(0,0,80,80,QPixmap
("../Image/2.jpg")); //儲存 pixmap.save("../Image/pixmap.jpg"); } Widget::~Widget() { delete ui; }
QImage:
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui
(new Ui::Widget) { ui->setupUi(this); //QImage image;//注意使用帶參的QImage時不能聲明後使用,系統會自動判你的宣告為定義無參函式QImage(); //指定背景大小和背景顏色 //QImage::Format_RGB32 黑色背景 QImage image(500,500,QImage::Format_ARGB32);//透明背景 QPainter p; p.begin(&image); //繪圖 p.drawImage(0,0,QImage("../Image/2.jpg")); for(int i = 0;i<50;i++) { for(int j=0;j<50;j++) { image.setPixel(QPoint(i,j),qRgb(0,255,0)); //獲取某點的畫素值 qDebug()<<image.pixel(QPoint(i,j));//返回值為qRgb } } image.save("../image.png"); p.end(); } Widget::~Widget() { delete ui; }
QPicture:

#include "widget.h"
#include "ui_widget.h"
#include <QPicture>
#include <QPainter>


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);


    QPicture picture;
    QPainter p;
    p.begin(&picture);
    p.drawPixmap(0,0,500,500,QPixmap("../Image/2.jpg"));
    p.drawLine(50,50,150,50);
    p.end();
    //儲存成二進位制檔案,無法開啟檢視,可通過重寫事件在Qt視窗檢視
    picture.save("../picture.jpg");
}


Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *event)//這是對paintEvent的重新,注意在 .h 中宣告
{
    QPicture pic;
    pic.load("../picture.jpg");
    QPainter p(this);
    p.drawPicture(0,0,pic);
}