QT中有三个常见的绘图设备:QPixmap、QImage、QPicture 。三者的用法几乎一模一样,但要注意三者性质上的区别。
- QPixmap :专门针对屏幕进行优化,和平台相关,不同的平台导致显示效果不一样(不能对图片像素点进行修改)
- QImage:和平台无关,可以对图片像素点进行修改,在线程中绘图(很重要)
- QPicture:保存绘图的状态(二进制文件,而不是图片),方便另外一个电脑进行读取
值得注意的是往常编写窗口绘图代码是在Virtual void PaintEvent() ; 函数中进行编写。但此次绘图是在绘图设备上进行,因此可以在相应的构造函数中进行程序编写。
QPixmap程序编写如下:
//QPixmap类的绘图设备, 400*300
QPixmap pixmap(400,300) ; // height , length 为其构造函数的参数
QPainter painter(&pixmap) ;
//填充背景颜色
painter.fillRect(0,0,400,300,QBrush(Qt::white));
painter.drawPixmap(0,0,80,80,QPixmap(":/new/prefix1/D:/Image/123456.jpg"));
//绘制了图片之后,想要查看的话,只有通过保存的方式才能进行查看。
//因为图片不在窗口中显示
//保存图片
pixmap.save("../pixmap.jpg") ; //图片保存在子文件的上级目录中。
QImage程序编写如下:
//创建一个绘图设备
QImage image(400,300,QImage::Format_ARGB32) ;//ARGB为透明格式
QPainter p(&image) ;
//绘图
p.drawImage(0,0,QImage(":/new/prefix1/D:/Image/123456.jpg"));
//对绘图设备前50个像素点进行操作
for(int i = 0;i < 50;i++)
{
for(int j = 0;j < 50;j++)
{
image.setPixel(QPoint(i,j),qRgb(0,255,0));
}
}
image.save("../QImage.png") ;
QPicture程序编写如下:
QPicture picture ;
QPainter painter(&picture) ;
painter.drawPixmap(0,0,80,80,QPixmap(":/new/prefix1/D:/Image/123456.jpg"));
painter.drawLine(50,50,150,50);
picture.save("../Qpicture.png") ;
注意:QPicture生成的是二进制文件,因此不能直接打开QPicture.png文件。但可以通过程序的方式间接打开:
QPicture pic ;
pic.load("../Qpicture.png") ;//加载文件
QPainter p(this) ;
p.drawPicture(0,0,pic);
QPixmap转换为QImage :
QPainter p(this) ;
QPixmap pixmap ;
pixmap.load(":/new/prefix1/D:/Image/pixmap.jpg") ;
QImage tempImage = pixmap.toImage() ;
p.drawImage(0,0,tempImage);
QImage转换为QPixmap:
QPainter p ;
QImage img ;
img.load(":/new/prefix1/D:/Image/QImage.png") ;
QPixmap tempMap = QPixmap::fromImage(img) ;
p.drawPixmap(200,0,tempMap);