首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UIImage和CIImage之间相互转换

如何在UIImage和CIImage之间相互转换
EN

Stack Overflow用户
提问于 2011-12-08 11:10:10
回答 6查看 62.1K关注 0票数 70

我正在尝试从屏幕上显示的ImageView获取CIImage

代码语言:javascript
复制
UIImage *image = myImageView.image;

将图像UIImage转换为CIImage

代码语言:javascript
复制
CIImage *cImage = [....];

该怎么做呢?

EN

回答 6

Stack Overflow用户

发布于 2012-06-20 08:45:52

虽然王长兴的答案实际上是正确的,但苹果表示,UIImage.CIImage并不总是有效的。具体地说,来自PocketCoreImage:

代码语言:javascript
复制
// 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];

苹果还使用了以下代码,这对我不起作用:

代码语言:javascript
复制
[UIImage imageWithCIImage:_filteredImage] 

我的个人实现,改编自this post,确实适用于我:

代码语言:javascript
复制
// 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]];
票数 31
EN

Stack Overflow用户

发布于 2013-04-24 20:07:13

这是最兼容的方式:

代码语言:javascript
复制
UIImage* u =[UIImage imageNamed:@"image.png"];
CIImage* ciimage = [[CIImage alloc] initWithCGImage:u.CGImage];

现在使用ciimage...

和Swift版本:

代码语言:javascript
复制
let i1 = UIImage(named: "testImage")
if let cgi1 = i1?.cgImage {
   let ci = CIImage(cgImage: cgi1)
   //use ci
}

(修复了if let语句中的拼写错误)

票数 24
EN

Stack Overflow用户

发布于 2015-03-18 21:54:44

下面是我在项目中使用的完整代码示例。

代码语言:javascript
复制
- (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,将会遇到问题。例如,调用

代码语言:javascript
复制
NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);

将返回nil

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8425647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档