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);
}