QT学习(十七)——绘图设备

    技术2022-07-11  84

    QPixmap和QBitmap的区别:QPixmap一般贴的是彩色的图片,而QBitmap一般贴的是黑白的图片

     

     

    第一排<-原背景图片背景透明

    第二排<-原背景图片背景白色

    第一列<-Pixmap贴图          

    第二列<-Bitmap贴图

     

     

    常用的一些绘图设备:

    Qpixmap:针对屏幕进行优化,和平台相关,不能对图片进行修改

    Qimage:和平台无关,可以对图片进行修改,可以在线程中绘图

    Qpicture:保存绘图的状态变成一个二进制文件

    ------------------------------------------------------------------

    Qpixmap

    //绘图设备,以及其大小 QPixmap pix(400,400); QPainter p(&pix); //填充背景色——画家填充 p.fillRect(0,0,400,400,QBrush(Qt::white)); /*使用绘图设备来填充 pix.fill(Qt::white);*/ p.drawPixmap(0,0,200,200,QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/answer.jpg")); //使用完绘图设备之后,需要保存一下,由于绘图设备不是窗口,那么需要保存为一个文件形式 pix.save("../pix.jpg");

    运行:他会在项目的上一级文件创建一个.jpg文件,如果背景不设置颜色,就默认为黑,代码中我把它使用画刷设置为白色。

     

    ------------------------------------------------------------------------

    Qimage

    //创建一个绘图设备,QImage::Format_ARGB32背景是透明的 QImage img(400,400,QImage::Format_ARGB32); //绘图 QPainter p2(&img); p2.drawImage(0,0,QImage(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/answer.jpg")); //对绘图设备前五十个像素点进行操作 for(int i=0;i<50;i++) { for(int j=0;j<50;j++) { //注意两个参数一个是QPoint,而另一个是qRgb img.setPixel(QPoint(i,j),qRgb(0,255,0)); } } img.save("../img.jpg");

    运行:他会在项目的上一级文件创建一个.jpg文件,但是我可以对它图片的像素进行操作,如果要对QImage的像素进行操作,img.setPixel(QPoint(i,j),qRgb(0,255,0)),注意第一个参数是QPoint,第二个参数是qRgb。

     

    -----------------------------------------------------------------------------------

    Qpicture

    QPicture pic; QPainter p3(&pic); p3.drawPixmap(0,0,QPixmap(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/answer.jpg")); p3.drawLine(10,10,100,10); pic.save("../pic.jpg");

    运行:图片被转换成了一个二进制文件储存,不过遗憾的是我并没有成功!!

     

     

    下面把二进制文件在转换成图片绘制到窗口上

    void Widget::paintEvent(QPaintEvent *) { QPicture pic; pic.load("../pic.jpg"); QPainter p(this); p.drawPicture(0,0,pic); }

    运行:由于二进制文件都没有所以这个也没有成功!!

    ---------------------------------------------------------------------------------------

    QPixmap和QImage之间的相互转换

    QPixmap->QImage使用pix.toImage()

    QImage->QPixmap使用QPixmap::fromImage(img)

    void Widget::paintEvent(QPaintEvent *) { QPainter p(this); QPixmap pix; pix.load(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/answer.jpg"); //QPixmap->QImage QImage tempImage=pix.toImage(); p.drawImage(0,0,tempImage); QImage img; img.load(":/new/prefix1/C:/Users/13764/Pictures/Saved Pictures/answer.jpg"); //QImage->QPixmap QPixmap tempPixmap=QPixmap::fromImage(img); p.drawPixmap(200,0,tempPixmap); }

    运行:

     

    Processed: 0.010, SQL: 9