【发布时间】:2016-10-25 08:40:27
【问题描述】:
我正在尝试将图像转换为 CVPixelBufferRef 以便可以进一步使用,但几秒钟后我的应用程序崩溃了。我可以看到应用程序启动时使用的内存为 2mb,但仅在 15 到 20 秒后,它就达到了 300mb。我的功能是这样的
- (CVPixelBufferRef) NpixelBufferFromCGImage: (CGImageRef) image
{
int height = 300;
int width = 400;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
[NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
nil];
CVPixelBufferRef pxbuffer = NULL;
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, width,
height, kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options,
&pxbuffer);
NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);
CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
NSParameterAssert(pxdata != NULL);
CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pxdata, width,
height, 8, 4*width, rgbColorSpace,
kCGImageAlphaNoneSkipFirst);
NSParameterAssert(context);
CGContextConcatCTM(context, CGAffineTransformMakeRotation(0));
CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
CGImageGetHeight(image)), image);
CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);
CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
return pxbuffer;
}
我给这个函数一个 ImageRef
【问题讨论】:
-
释放此函数返回的缓冲区的代码在哪里/是什么?
-
我正在调用这个 CGImageRef imageRef=[myImage CGImage]; CVImageBufferRef pixelBuffer = [self pixelBufferFromCGImage:imageRef];
-
我没有释放我试图释放的缓冲区,但它造成了崩溃。不知道在哪里使用我试过 CFRelease(pixelBuffer); @Feldur
-
如果您没有释放缓冲区,那么这就是您的内存泄漏的根源。当你释放它时,你需要找出它崩溃的原因。最有可能的是,您在释放后使用缓冲区
标签: ios objective-c memory-leaks cvpixelbuffer