QImage 利用数据生成图片 对数据采用的是浅拷贝,不是深拷贝

    技术2022-07-11  117

    QImage 构造函数

    QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR); explicit QImage(const QString &fileName, const char *format = Q_NULLPTR);

    这些全部都是浅拷贝构造函数,就是说图像的数据部分不会进行复制。

    也就是说,如果把构造图片时使用的图像数据释放,这些图片的内容就无效,只是一些无效数据。

    QImage *imgTmp = new QImage(path);

    调用这个语句会生成一个QImage对象的指针。 然而当对这个指针进行释放,即使这个对象调用析构函数之后,这个图像的图像数据部分不会同步进行释放。

    QImage *imgTmp = new QImage(path); QImage img1 = *imgTmp; delete imgTmp;

    就像这样,如果把imgTmp这个指针释放,在img1 这一对象还是完整的,图像数据部分还存在,这个图片还可以正常显示。

    Processed: 0.013, SQL: 9