我正在尝试从屏幕上显示的ImageView获取CIImage。
UIImage *image = myImageView.image;将图像UIImage转换为CIImage。
CIImage *cImage = [....];该怎么做呢?
发布于 2012-06-20 08:45:52
虽然王长兴的答案实际上是正确的,但苹果表示,UIImage.CIImage并不总是有效的。具体地说,来自PocketCoreImage:
// Create a CIImage from the _inputImage. While UIImage has a property returning
// a CIImage representation of it, there are cases where it will not work. This is the
// most compatible route.
_filteredImage = [[CIImage alloc] initWithCGImage:_inputImage.CGImage options:nil];苹果还使用了以下代码,这对我不起作用:
[UIImage imageWithCIImage:_filteredImage] 我的个人实现,改编自this post,确实适用于我:
// result is a CIImage, output of my filtering.
// returnImage is (obviously) a UIImage that I'm going to return.
CIContext *context = [CIContext contextWithOptions:nil];
UIImage *returnImage =
[UIImage imageWithCGImage:[context createCGImage:result fromRect:result.extent]];发布于 2013-04-24 20:07:13
这是最兼容的方式:
UIImage* u =[UIImage imageNamed:@"image.png"];
CIImage* ciimage = [[CIImage alloc] initWithCGImage:u.CGImage];现在使用ciimage...
和Swift版本:
let i1 = UIImage(named: "testImage")
if let cgi1 = i1?.cgImage {
let ci = CIImage(cgImage: cgi1)
//use ci
}(修复了if let语句中的拼写错误)
发布于 2015-03-18 21:54:44
下面是我在项目中使用的完整代码示例。
- (UIImage *)makeUIImageFromCIImage:(CIImage *)ciImage {
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:ciImage fromRect:[ciImage extent]];
UIImage* uiImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return uiImage;
}CIImage基本上就是一个图像的配方。如果您尝试直接从CIImage转换为UIImage,将会遇到问题。例如,调用
NSData * UIImageJPEGRepresentation (
UIImage *image,
CGFloat compressionQuality
);将返回nil。
https://stackoverflow.com/questions/8425647
复制相似问题