Qt在构造QImage时, 默认使用浅拷贝构造对象,形如
QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0);
QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0);
QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0);
QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = 0, void *cleanupInfo = 0);
构造函数都是使用的浅拷贝机制,这样做好处是明显的,不用额外分配内存,执行效率也高。但是当QImage中的内存先于QImage被提前释放后,会引起程序的崩溃。所以使用时要加以控制。
如果程序确实无法避免内存被提前释放,则需要使用深拷贝的机制。
但是当QImage对象创建过于频繁时,深拷贝会导致程序性能下降,以及会造成比必要的内存锁片。
这时可以考虑使用内存池优化程序性能。
具体使用方式如下:
uchar* pBuffer = (