【IOS 开发学习总结-OC-63】UIImage 与 CGImage,CGImageRef
2015-10-21 22:32
686 查看
【IOS 开发学习总结-OC-63】UIImage 与 CGImage,CGImageRef
UIImage 专门用来显示各种位图,支持的图片格式有:当系统内存紧张时,UIImage会将图片数据从UIImage对象中清理出去来节省内存使用——但不清理对象本身。当程序使用一个图片被清理后的UIImage对象时,该UIImage会自动从原始的图片文件中加载图片数据。
注意:尽量避免UIImage加载过大(比如1024x1024)的图片,如果实在需要加载这种大图片,可以考虑将图片分解成多张小图进行加载。
用UIImage显示静止的图片,可以使用UIImage提供的如下常用类方法:
1.
+ (nullable UIImage *)imageNamed:(NSString *)name;// load from main bundle ——用于加载指定文件名对应的图片。该方法有缓存机制,如果该方法试图加载的图片文件不存在,它才会去加载并缓存图片文件;如果已经缓存过,该方法将直接使用已缓存的图片。
说明:若程序需要频繁的加载,卸载图片时,不该使用该方法加载图片。
+ (nullable UIImage *)imageWithContentsOfFile:(NSString *)path;——加载指定文件名对应的图片
+ (nullable UIImage *)imageWithData:(NSData *)data;——根据NSData封装的图片数据来创建图片
+ (nullable UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0);——根据NSData封装的图片数据来创建图片,并按指定的缩放因子进行缩放
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage;——根据指定的CGImageRef对象来创建UIImage
+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation NS_AVAILABLE_IOS(4_0);——根据指定的CGImageRef对象来创建UIImage,并按指定方向用指定的缩放因子进行缩放
+ (UIImage *)imageWithCIImage:(CIImage *)ciImage NS_AVAILABLE_IOS(5_0);——根据指定的CIImage对象来创建UIImage
+ (UIImage *)imageWithCIImage:(CIImage *)ciImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation NS_AVAILABLE_IOS(6_0);——根据指定的CIImage对象来创建UIImage,并按指定方向用指定的缩放因子进行缩放
对UIImage读取图片的分类
应用资源包种读取图片——借助imageNamed:方法读取
如:
UIImage *abc=[UIImage imageNamed:@"abc.png"];
从网络中读取图片——可借助 NSData 的方法加载指定 URL 对应的网络数据
示例代码:
NSURL *url=[NSURL URLWithString:@"http://www.abc.com/haha.png"]; NSData *data=[NSData dataWithContentsOfURL:url]; UIImage *image=[UIImage imageWithData:data];
从手机本地读取图片
示例代码:
NSString *path=[[NSHomeDirectory() stringByAppendingPathComponent:@"document"] stringByAppendingPathComponent:@"abc.png"]; UIImage *image=[UIImage imageWithContentsOfFile:path];
UIImage实现动画显示多张图片
UIImage可以加载多张图片,并按指定时间间隔依次显示多张图片,就可以实现动画效果。UIImage提供了如下方法:-
+ (nullable UIImage *)animatedImageNamed:(NSString *)name duration:(NSTimeInterval)duration NS_AVAILABLE_IOS(5_0);——根据指定的图片名加载系列图片。如,该方法的第一个参数名 为 book(即代表以 该字符串开头),该方法会自动加载 book0.png, book1.png, book2.png 等图片。
// read sequence of files with suffix starting at 0 or 1
+ (nullable UIImage *)animatedResizableImageNamed:(NSString *)name capInsets:(UIEdgeInsets)capInsets duration:(NSTimeInterval)duration NS_AVAILABLE_IOS(5_0); // sequence of files
//创建一个在可变大小的图片上指定矩形区域内的动态图片
+ (nullable UIImage *)animatedResizableImageNamed:(NSString *)name capInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode duration:(NSTimeInterval)duration NS_AVAILABLE_IOS(6_0);
//同上,只是多了一个图片变化的方式,具体来说就是平铺或者拉伸
+ (nullable UIImage *)animatedImageWithImages:(NSArray<UIImage *> *)images duration:(NSTimeInterval)duration NS_AVAILABLE_IOS(5_0);
——传入一个图片数组。该数组中的元素都是UIImage对象。
CGImageRef 与 CGImage
UIImage虽然可以实现上面说的一些功能,但功能依然有限。它不能对图片进行缩放,旋转,不同截取图片的指定区域等。这些功能可以借助 Quartz2D的CGImageRef来实现。UIImage与CGImageRef可以相互转换。CGImageRef只是个指针类型,并不是面向对象的 API,也不是个类。——Quartz2D对CGImageRef的定义:
typedef struct CGImage *CGImageRef;。
如何转换?
1. 如果已经有UIImage,调用UIImage的 CGImage 方法获取它封装的CGImageRef。如下代码片:
UIImage *imagePP=[UIImage imageWithData:data]; CGImageRef cif=[imagePP CGImage];
如果已经有CGImageRef,调用UIImage的
imageWithCGImage:方法加载图片即可。如下代码片:
CGImageRef cif=[imagePP CGImage]; UIImage *abcImage=[UIImage imageWithCGImage:cif];
补充学习资料:
ios下UIImage相关开发经验总结
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 如何成为一名专家级的开发人员
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法