我想将CIImage转换为UIImage,但失败了。

3

我有一个CIImage,格式为kCVPixelFormatType_420YpCbCr8BiPlanarFullRange(YCC420fN12),现在我想看一下这张图片的样子,所以我使用了以下方法将其转换为UIImage:

CIImage *ciImage = [CIImage imageWithCVPixelBuffer:new_buffer];

CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CGImageRef videoImage = [temporaryContext
                          createCGImage:ciImage
                               fromRect:CGRectMake(0, 0,
                                        CVPixelBufferGetWidth(new_buffer),
                                        CVPixelBufferGetHeight(new_buffer))];

UIImage *uiImage = [UIImage imageWithCGImage:videoImage];

当图像格式为 BGRA 时,一切正常,但对于 NV12 则不行,在控制台中会显示错误信息:

Render failed because a pixel format YCC420f is not supported.

顺便提一下,ciimage来自于一个CVPixelBufferRef,而这个CVPixelBufferRef又是由GL纹理的地址生成的。

那么,我该怎么办呢?


使用UIImage *uiImage = [[UIImage alloc] initWithCIImage:ciImage];而不是imageWithCGImage:。 - AleyRobotics
@Yuri 同样的问题。而且 CIImage->CGImageRef->UIImage 更好,imageWithCIImage 有时会返回 nil 而没有错误信息。 - Klein Mioke
适用于iOS 7:UIImage *uiImage = [[UIImage alloc] initWithCIImage:ciImage]; - Adeel
1个回答

0

只需一行简单的代码(适用于IOS 5.0及以上版本)

UIImage *uiImage = [[UIImage alloc] initWithCIImage:ciImage];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接