我正在从CVPixelBufferRef中抓取CIImage,然后将这些CIImage渲染回CVPixelBufferRef' s。结果是一部黑色电影。我尝试了几种创建新CVPixelBufferRef的变体,但结果总是一样。
CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CVPixelBufferRef pbuff = NULL;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
[NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
nil];
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault,
640,
480,
kCVPixelFormatType_32BGRA,
(__bridge CFDictionaryRef)(options),
&pbuff);
if (status == kCVReturnSuccess) {
[temporaryContext render:ciImage
toCVPixelBuffer:pbuff
bounds:ciImage.extent
colorSpace:CGColorSpaceCreateDeviceRGB()];
} else {
NSLog(@"Failed create pbuff");
}
我做错了什么?
答案 0 :(得分:0)
事实证明,CIImage在模拟器中创建后变为零。我确实发现,如果我在设备上运行相同的代码,那么它就可以工作。
答案 1 :(得分:-2)
您需要使用glReadPixels手动将像素读入缓冲区。你可以在这里找到更多相关信息。