QImage:使用QImage构造函数加载图像和使用成员函数loadFromData加载图像的区别

结论:

  QImage构造函数,既可以加载内存图像数据,也可以加载二进制文件数据

  loadFromData成员函数,只能加载二进制文件数据

 

loadFromData Qt帮助文档说明

 

 

编写测试代码验证

QImage m_img = QImage("D:1.jpg");
void Widget::on_pushButton_clicked()
{
    // 数据一:图像内存数据
    uchar* data = (uchar*)m_img.bits();                     // 图像数据
    int data_len = m_img.bytesPerLine() * m_img.height();   // 图像数据的长度

    // 数据二:图像二进制数据
    QByteArray array;
    QBuffer buf(&array);
    buf.open(QIODevice::WriteOnly);
    m_img.save(&buf, "JPG");


    // 测试一:使用QImage构造函数加载图像
    // QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
    QImage img_1(data,m_img.width(),m_img.height(),QImage::Format_RGB32);
    qDebug() << "image 1:" << img_1.isNull();
    img_1.save("D:res_1.jpg");

    // 测试二:使用成员函数loadFromData加载图像(加载内存数据)
    // loadFromData(const uchar *data, int len, const char *format = nullptr)
    QImage img_2;
    img_2.loadFromData(data, data_len, "JPG");
    qDebug() << "image 2:" << img_2.isNull();
    img_2.save("D:res_2.jpg");

    // 测试三:使用成员函数loadFromData加载图像(加载二进制文件数据)
    // loadFromData(const uchar *data, int len, const char *format = nullptr)
    QImage img_3;
    img_3.loadFromData((uchar*)array.data(), array.length());
    qDebug() << "image 3:" << img_3.isNull();
    img_3.save("D:res_3.jpg");
}

 

 

 

 

posted @ 2024-03-30 00:09  十一的杂文录  阅读(647)  评论(0编辑  收藏  举报