,我看了所有的材料和它类似的职位,但我不能让主“理念”正在发生什么,以及如何解决它,以同样的10的问题,每个人都与@autoreleasepool
在这种情况下,我无法才达到我的目标解决这个问题。所以,当转换cvMat到UIImage我有增加内存取决于大小。内存问题在这里张贴了这个问题之前,将与CvMat到的UIImage
下面是步骤,我正在转换垫的UIImage之前做:
cv::Mat undistorted = cv::Mat(cvSize(maxWidth,maxHeight), CV_8UC1);
cv::Mat original = [MatStructure convertUIImageToMat:adjustedImage];
cv::warpPerspective(original, undistorted, cv::getPerspectiveTransform(src, dst), cvSize(maxWidth, maxHeight));
original.release();
adjustedImage = [MatStructure convertMatToUIImage:undistorted];
undistorted.release();
问题是可见的,而我将我的垫的UIImage,内存上升到400 MB,并在每次上升周期。
+ (UIImage *) convertMatToUIImage: (cv::Mat) cvMat {
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()];
CGColorSpaceRef colorSpace;
if (cvMat.elemSize() == 1) {
colorSpace = CGColorSpaceCreateDeviceGray();
} else {
colorSpace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef) data);
CGBitmapInfo bmInfo = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big;
CGImageRef imageRef = CGImageCreate(cvMat.cols, // width
cvMat.rows, // height
8, // bits per component
8 * cvMat.elemSize(), // bits per pixel
cvMat.step.p[0], // bytesPerRow
colorSpace, // colorspace
bmInfo, // bitmap info
provider, // CGDataProviderRef
NULL, // decode
false, // should interpolate
kCGRenderingIntentDefault // intent
);
UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
cvMat.release(); // this line is optional.
return image;
}
我见过很多类似的代码,但是每个例子都是这样的。 我相信在(__bridge CFDataRef)
和ARC
这个问题持有不能清理该数据,如果我会尽量CFRelease((__bridge CFDataRef)data)
比会发生碰撞,因为程序会搜索分配内存和将已释放,因此将运行崩溃。
我使用openCV3
并想尽方法MatToUIImage
但问题依然exsits,在leaks
探查无泄漏可言,并在内存中最昂贵的任务是convertMatToUIImage
。
我读了一整天关于它,但实际上无法找到任何有用的解决方案呢。
目前我在swift 3.0
它继承class XXX
工作,它使用objC
类裁剪的东西,不是回到UIImage
为好。在deinit
我正在分配这个继承类属性为零,但问题仍然exsists.Also我认为dataWithBytes
就像如果我有16MB
在开始创建NSData
之后会32MB
重复记忆..
并请,如果你能提出关于这个问题的有用的线程,我会很高兴阅读它们。感谢您的帮助