渲染到CVPixelBuffer会产生黑色图像

时间:2014-08-13 19:18:10

标签: ios

我正在从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");
 } 

我做错了什么?

2 个答案:

答案 0 :(得分:0)

事实证明,CIImage在模拟器中创建后变为零。我确实发现,如果我在设备上运行相同的代码,那么它就可以工作。

答案 1 :(得分:-2)

您需要使用glReadPixels手动将像素读入缓冲区。你可以在这里找到更多相关信息。

Link with implementation is here