其他分享
首页 > 其他分享> > QT 绘图设备的总结

QT 绘图设备的总结

作者:互联网

QT中有三个常见的绘图设备:QPixmap、QImage、QPicture  。三者的用法几乎一模一样,但要注意三者性质上的区别。

  1. QPixmap :专门针对屏幕进行优化,和平台相关,不同的平台导致显示效果不一样(不能对图片像素点进行修改)
  2. QImage:和平台无关,可以对图片像素点进行修改,在线程中绘图(很重要)
  3. 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);

 

标签:总结,pixmap,QT,50,QPicture,绘图,QPixmap,QImage
来源: https://blog.csdn.net/qq_42138448/article/details/110161638