이미지를 CVPixelBufferRef로 변환하려고하는데 사용 중이지만 몇 초 후에 앱이 다운됩니다. 응용 프로그램이 시작될 때 2MB와 같은 메모리를 사용하지만 15 ~ 20 초 후에는 300MB까지 올라갈 수 있습니다. 내 함수는이iOS에서 메모리 누수가 발생하여 이미지를 CVPixelBufferRef로 변환합니다.
- (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;
}
내가 그냥 긴 작업의 경우 @autoreleasepool {당신의 방법 코드} 나를 위해 그것의 매우 도움과 노력이 기능
/이 함수가 반환하는 버퍼를 해제하는 코드는 무엇입니까? – Feldur
나는 이것을 부른다. CGImageRef imageRef = [myImage CGImage]; CVImageBufferRef pixelBuffer = [self pixelBufferFromCGImage : imageRef]; –
내가 풀어려고했던 버퍼를 공개하지는 않지만 충돌이 발생했습니다. CFRelease (pixelBuffer)를 시도한 곳을 어디에서 사용해야할지 모릅니다. @Feldur –