工程文件:
widget.cpp:
#include "widget.h" #include "ui_widget.h" #include <QPainter> #include <QPixmap> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //由于不是在窗口中进行绘图,即不用在piantEvent 中实现,在QPixmap的设备中实现,这里在构造函数中实现就可以了, //绘图设备 ,400*300 QPixmap pixmap(400,300); QPainter p(&pixmap); //填充白色的背景 // p.fillRect(0,0,400,300,QBrush(Qt::white)); pixmap.fill(Qt::white); //画一张图片并保存 p.drawPixmap(0,0,80,80,QPixmap("://res/2.png")); pixmap.save("../pixmap.png"); } Widget::~Widget() { delete ui; } /* * 绘图设备: * QPixmap:针对屏幕进行优化了,和平台相关(显卡),不能对图片进行修改 * QImage:和平台无关,可以对图片进行修改,在线程中绘图(例如在地图的导航应用中) * QPicture:保存绘图的状态(二进制文件) */
当使用QImage 的时候,
mywidget.cpp:
#include "mywidget.h" #include "ui_mywidget.h" #include <QPainter> MyWidget::MyWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MyWidget) { ui->setupUi(this); //创建一个绘图设备,QImage::Format_ARGB32背景是透明 QImage image(400,300,QImage::Format_ARGB32); QPainter p; p.begin(&image); //绘图 p.drawImage(0,0,QImage("://res/2.png")); // p.drawImage(0,0,QImage("://res/0.jpg"));在做实验的时候,发现用这一句的时候,当对像素点操作的时候没有现象产生,换了图片就可以了 //对绘图设备的前50个像素点进行操作 for (int i = 0;i <150 ;i++) { for (int j = 0; j < 50 ;j++) { image.setPixel(QPoint(i,j),qRgb(0,255,0)); } } p.end(); image.save("../image.png"); } MyWidget::~MyWidget() { delete ui; }