[转]QImage的浅拷贝与深拷贝 -- Deep Copy
来源:互联网 发布:不要网络的单机游戏 编辑:程序博客网 时间:2024/05/01 19:51
首先简单说说什么是浅拷贝和深拷贝:浅拷贝就比如像引用类型,而深拷贝就比如值类型,即浅拷贝是共用一块内存的,而深拷贝是复制一份内容。 我们再来看看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的构造行数是否是深/浅拷贝。
QImage的浅拷贝与深拷贝
- const uchar *pSrc = (const uchar*)mat.data; //Mat mat
- // Create QImage with same dimensions as input Mat
- QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32);
- return image.copy();
QImage image;
image = QImage(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32); //This is a Shallow copy !!
阅读全文
0 0
- [转]QImage的浅拷贝与深拷贝 -- Deep Copy
- QImage的浅拷贝与深拷贝
- 深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- 深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- iOS 浅拷贝(Shallow Copy)与深拷贝(Deep Copy)
- 浅拷贝和深拷贝(shallow copy VS deep copy )
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)(转载)
- .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
- Deep copy(深拷贝)和shallow copy(浅拷贝)的区别
- 实现深拷贝的类 Deep Copy
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解(shallow copy and deep copy)
- 深拷贝(deep clone)和浅拷贝(shallow copy)
- 深拷贝,浅拷贝与copy,strong
- 深拷贝deepcopy与浅拷贝copy
- python的深拷贝deepcopy与浅拷贝copy
- java操作Excel
- javaSE-Day5 引用传递(数据表与java类的转换)
- PAT-1063 Set Similarity (set集合)
- MySQL和Oracle的group by的异同
- Lua爬坑手记
- [转]QImage的浅拷贝与深拷贝 -- Deep Copy
- [转]CSDN-markdown编辑器语法——字体、字号与颜色
- 超级字符串
- html03-盒子模式
- 如何用位运算符(~)和数据运算符(-)来计算表示n + 1和n
- 点九图的制作方法
- java作用域public protected private,以及不写时的区别
- 01 Hibernate测试
- linux中class_create和class_register说明