首页 > 代码库 > QImage的浅拷贝与深拷贝
QImage的浅拷贝与深拷贝
首先简单说说什么是浅拷贝
和深拷贝
:浅拷贝就比如像引用类型,而深拷贝就比如值类型,即浅拷贝是共用一块内存的,而深拷贝是复制一份内容。
我们再来看看QImage类的几个构造函数:
// 浅拷贝QImage(uchar * data, int width, int height, Format format)// 浅拷贝QImage(const uchar * data, int width, int height, Format format)// 浅拷贝QImage(uchar * data, int width, int height, int bytesPerLine, Format format)// 浅拷贝QImage(const uchar * data, int width, int height, int bytesPerLine, Format format)// 深拷贝QImage QImage::copy(const QRect & rectangle = QRect()) const// 浅拷贝QImage QImage::rgbSwapped() const
从构造函数可以得知只要知道:
- 指向图像数据的uchar*型地址
- 图像宽度
- 图像高度
- 图像格式或者是图像的每行字节数(通道*宽度)
那么就可以构造出一个QImage的实体
,而这里讨论的是,这个实体是与传入构造函数的图像数据地址指向的内存块是同一块内存,即浅拷贝。其实在OpenCV
的Mat类构造也是如此,类似的还有Qt中的QPixmap。
// 拷贝构造函数,深拷贝QPixmap::QPixmap(const QPixmap & pixmap)// 浅拷贝QPixmap & QPixmap::operator=(const QPixmap & pixmap)// 深拷贝QPixmap QPixmap::copy(const QRect & rectangle = QRect()) const
最后,可以去做个实验来验证,读取指定大小的一张图像到开辟好的内存块dataBuffer中
–>通过这个内存块和图像相关信息构造一个QImage实体qimg
–>显示qimg
–>将dataBuffer清空(memset)
–>显示qimg
,来判断QImage的构造行数是否是深/浅拷贝。
http://blog.csdn.net/freeape/article/details/52614700
QImage的浅拷贝与深拷贝
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。