QT繪圖裝置(QPixmap,QImage,QPicture)
阿新 • • 發佈:2021-01-07
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);
}