关闭

苹果开发 笔记(48) UIImage CIImage CGImageRef

6160人阅读 评论(1) 收藏 举报
分类:

UIImage 有很多有用的东西,前段时间接触了coreImage的API,发现有一个CIImage的东西,同样还有一个CGImage的东西,这三者总是可以切换起来,多少让人觉得这个东西很能耐。
IOS编程揭秘 书中记录着如下一段话。

UIImage类的Core Graphics
版本是CGImage(CGImageRef)这两个类之间很容易进行转换,因为一个UIImage类有一个CGImage的属性“

1.创建过程

UIImage 常规创建过程

UIImage *image =[ UIImage imageNamed:@"xx.png"];

CGmage的创建过程

CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage,CGRectMake(0,0,size.width,size.height));

或者

UIImage *image =[ UIImage imageNamed:@"xx.png"];
CGImageRef imageRef = [image CGImage];

CIImage的创建过程

  NSString *path = [[NSBundle mainBundle] pathForResource:@"bbg" ofType:@"jpg"];
  NSURL *myURL = [NSURL fileURLWithPath:path];

  CIImage *ciImage = [CIImage imageWithContentsOfURL:myURL];

2.相互转换

UIImage, CGImageRef, CIImage 三者之间可以通过一些联系进行转换


2.1 UIImage 转换CGImageRef

UIImage 类当中包含了CGImage的属性,所以很方便地就能转换,方法如下

UIImage *image =[ UIImage imageNamed:@"xx.png"];
CGImageRef imageRef = [image CGImage];

2.2 CGImageRef 转换UIImage

UIImage里面包含了一个方法imageWithCGImage,如果知道了CGImage,则这样子也可以创建得到UIIamge类,在上面我们可以看到关系 UIImage 通过属性得到CGImageRef,同样地两者也可以关联起来。

UIImage—>CGImageRef
CGImageRef –> UIImage

UIImage *uiImage =[UIImage imageWithCGImage:cgImage]; 

2.3 CIImage 转换CGImageRef

CIContext 当中有一个方法createCGImage,可以创建得到CGImageRef,换句话可知道CIImage 可以通过其他方式转换CGImageRef

 CIContext *context = [CIContext contextWithOptions:nil];                
  CIImage *ciImage = [CIImage imageWithContentsOfURL:myURL];                
  filter = [filterWithName:@"CISepiaTone"];            
  [filter setValue:ciImage forKey:kCIInputImageKey];
  [filter setValue:@0.8f forKey:kCIInputIntensityKey];
  CIImage *outputImg = [filter outputImage];   
  CGImageRef cgImage = [context createCGImage:outputImg fromRect:[outputImg extent]]; 


最主要的一句

  CGImageRef cgImage = [context createCGImage:outputImg fromRect:[outputImg extent]];

2.4 UIImage 转换CIImage

CIImage  *ciImage = [UIImage imageNamed:@"test.png"].CIImage
UIImage *image = [[UIImage alloc] initWithCIImage:ciImage];

但是采用这种方式转换,CIImage的值会是nil,
相反 采用CIImage 的initWithCGImage初始化的方式 则有值,很奇怪

  UIImage *image = [UIImage imageNamed:@"test.png"];
  CIImage *ciImage = [[CIImage alloc]initWithCGImage:image.CGImage];



由此可见,三者都可以实现转换了,通过直接或者间接把他们联系起来。
UIImage –> CGImageRef –> CIImage
UIImage <– CGImageRef <– CIImage

0
0
查看评论

将一个CIImage转换为我们的UIImage

  • baohanqing
  • baohanqing
  • 2016-05-15 21:27
  • 1741

Swift之CIImage、CGImage、UIImage之间的相互转换

Swift之CIImage、CGImage、UIImage之间的相互转换 iOS开发中对于Image的对象有三种形式CIImage、CGImage、UIImage,有时候我们通常需要三者之间进行转换,下面简单介绍一下: CIImage转UIImage// CIImage转UIImage相对简单,...
  • iTaacy
  • iTaacy
  • 2017-04-05 15:33
  • 1588

CIImage CGImage UIImage 区别

我看见有人说,“不知道苹果怎么想的,搞了这么多乱七八糟的图片格式,转换起来很麻烦”,然后把大量的精力放在了格式转换上,真是醉了。此处不写方法,谨写些区别。CIImage 包含了创建图片的所有必要的数据,但其本身没有渲染成图片,它代表的是图像数据或者生成图像数据的流程(如滤镜);CGImage是基于像...
  • xiaolinyeyi
  • xiaolinyeyi
  • 2016-05-17 15:00
  • 1454

有图像数据了,应该用CGBitmapContextCreate 还是CGImageCreate呢

https://www.evernote.com/shard/s234/sh/7799f2a3-fde0-4b63-8c44-d1c90f945227/123f60439e171aa1fa324932ad70e3a8
  • whf727
  • whf727
  • 2014-06-25 11:12
  • 1015

IOS中使用像素位图(CGImageRef)对图片进行处理

IOS中对图片进行重绘处理的方法总结 一、CGImageRef是什么 CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写。在CGImage.h文件中,我们可以看到下面的定义: typedef struct CGImage...
  • luckypeng
  • luckypeng
  • 2016-05-15 17:03
  • 596

CGImageRef与UIImage互转

CGImageRef cgRef= CGBitmapContextCreateImage(context); UIImage* image = [UIImage imageWithCGImage: cgRef]; UIImage转换成CGImageRef UIImage *uiImage...
  • theonezh
  • theonezh
  • 2012-06-05 15:59
  • 11456

iOS开发中关于UIImage的知识点总结

本文是转载文章
  • Ordinary_Rookie
  • Ordinary_Rookie
  • 2016-04-07 14:28
  • 393

UIImage CIImage CGImageRef

UIImage 有很多有用的东西,前段时间接触了coreImage的API,发现有一个CIImage的东西,同样还有一个CGImage的东西,这三者总是可以切换起来,多少让人觉得这个东西很能耐。  iOS编程揭秘 书中记录着如下一段话。 UIImage类的Core Graphi...
  • wu347771769
  • wu347771769
  • 2016-08-09 12:29
  • 156

UIImage与CIImage的区别

CIImage 包含了创建图片的所有必要的数据,但其本身没有渲染成图片,它代表的是图像数据或者生成图像数据的流程(如滤镜); CGImage是基于像素的矩阵,每个点都对应了图片中点的像素信息; UIImage 管理图片数据,主要用来展现,如 UIImageView 中,控件中等,也可以用...
  • MouXiaoxiong
  • MouXiaoxiong
  • 2016-10-25 14:55
  • 1065

谈谈UIImage、CGImageRef、CIImage

简单谈谈关于UIImage,CGImageRef,CIImage的粗浅理解
  • nine_Demon
  • nine_Demon
  • 2016-11-12 13:14
  • 1226
    个人资料
    • 访问:2005621次
    • 积分:38148
    • 等级:
    • 排名:第120名
    • 原创:1351篇
    • 转载:22篇
    • 译文:0篇
    • 评论:2139条
    公告栏
    是夏天带来了热情,
    还是热情与夏天恋爱了?
    我倾夏天的脚步,
    感受清风的凉意,
    在行云流水之中,
    追求一种人生哲学.
    QQ :877690056

    赞赏在下

    Flag Counter
    文章存档