【发布时间】:2016-02-24 05:11:42
【问题描述】:
我正在使用一些链式过滤器生成一个 CIImage,并尝试在用户相册中输出生成的图像以用于某些调试目的。我提供给UIImageWriteToSavedPhotosAlbum() 的回调总是返回一个 nil 错误,所以我认为没有任何问题。但图像似乎从未出现过。
我过去曾使用此功能将 OpenGL 缓冲区转储到相册以进行调试,但我意识到情况并非如此。我应该做些不同的事情吗?
-(void)cropAndSaveImage:(CIImage *)inputImage fromFeature:(CIFaceFeature *)feature
{
// First crop out the face.
[_cropFilter setValue:inputImage forKey:@"inputImage"];
[_cropFilter setValue:[CIVector vectorWithCGRect:feature.bounds] forKey:@"inputRectangle"];
CIImage * croppedImage = _cropFilter.outputImage;
__block CIImage * outImage = croppedImage;
dispatch_async(dispatch_get_main_queue(), ^{
UIImage * outUIImage = [UIImage imageWithCIImage:outImage];
UIImageWriteToSavedPhotosAlbum(outUIImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
});
}
-(void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
NSLog(@"debug LBP output face. error: %@", error);
}
我已验证边界永远不会为 0。
回调输出总是
调试 LBP 输出面。错误:(空)
【问题讨论】:
-
您需要权限才能访问这些照片。 Permission to camera roll
-
不,不是这样。我的代码第一次尝试访问它时,通常会通过提示授予访问相机胶卷的权限。我弄清楚了实际的问题。看来我需要实际渲染图像并直接使用 CGImageRef 来实例化 UIImage。不知道为什么这是必要的,可能是 iOS 9 中的错误或兼容性更改?我看过较早的帖子,表明我使用的方法是正确的。请参阅下面的答案。
标签: ios uikit core-image photosframework