from: http://blog.csdn.net/wudizhukk/article/details/8989804

CGImage和CGImageRef这两个应当是用来重绘图形的类,它们在应用时是按照图像的像素矩阵来绘制图片的,它们可以用来处理bitmap。

CGImageRef与UIImage的互转

CGImageRef转换成UIImage CGImageRef

iOffscreen = CGBitmapContextCreateImage(context);

UIImage* image = [UIImage imageWithCGImage: iOffscreen];

UIImage转换成CGImageRef

UIImage *loadImage=[UIImage imageNamed:@"comicsplash.png"];

CGImageRef cgimage=loadImage.CGImage;

显示部分图片,如 加载的图片高为768,美工常常这样,我只要截取748,就需要用到以下代码

NSString* imagePath = [[NSBundlemainBundle] pathForResource:@"主页面" ofType:@"png"];

UIImage* imageNameBack = [UIImage imageWithContentsOfFile:imagePath];

UIImageView *image=[[UIImageView alloc] initWithFrame:CGRectMake(0,0, 1024, 748)];

image.image = [UIImageimageWithCGImage:CGImageCreateWithImageInRect([imageNameBackCGImage],CGRectMake(0,20, 1024, 748))];

imageNamed 与 imageWithContentsOfFile的区别

如题,是不是大家为了方便都这样加载图片啊

myImage = [UIImage imageNamed:@"icon.png"];
那么小心了
这种方法在一些图片很少,或者图片很小的程序里是ok的。
但是,在大量加载图片的程序里,请千万不要这样做。
为什么呢 ???????

这种方法在application bundle的顶层文件夹寻找由供应的名字的图象 。 如果找到图片,装载到iPhone系统缓存图象。那意味图片是(理论上)放在内存里作为cache的。

试想你图片多了,是什么后果``````
图片cache极有可能不会响应 memory warnings and release its objects

所以,用图片的时候一定要小心的alloc和release
推荐使用
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFile:path];

用UIImage加载图像的方法很多,最常用的是下面两种:

1、用imageNamed函数

[UIImage imageNamed:ImageName];

2、用NSData的方式加载,例如:

   1. NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
   2. NSData *image = [NSData dataWithContentsOfFile:filePath];
   3. [UIImage imageWithData:image];

由于第一种方式要写的代码比较少,可能比较多人利用imageNamed的方式加载图像。其实这两种加载方式都有各自的特点。

1)用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的 内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利 用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在 一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。

2)利用NSData方式加载时,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。

无论用哪种方式加载图像,图像使用结束后,一定要记得显示释放内存。

IOS疯狂基础之UIImage相关推荐

  1. IOS疯狂基础之GIF图片的显示

    2019独角兽企业重金招聘Python工程师标准>>> IOS疯狂基础之GIF图片的显示 iPhone SDK提供了多种动画手段,UIView.UIImageView和CALayer ...

  2. IOS疯狂基础之屏幕旋转控制,获得当前方向

    获得当前屏幕方向 self.interfaceOrientation或[[UIApplication sharedApplication] statusBarOrientation] if (self ...

  3. IOS疯狂基础之隐藏系统键盘

    最简单的办法--设置为不可用: [dateTo setUserInteractionEnabled:NO];//不弹出键盘 [dateFrom setEnabled:NO];//不弹出键盘 [[[UI ...

  4. IOS疯狂基础之键盘挡住输入框

    一般来讲就是把整个屏幕上移么,不让键盘遮住 #pragma mark textField delegate  输入完后代理事件 - (void)textFieldDidEndEditing:(UITe ...

  5. IOS疯狂基础之MessageUI—短信

    我们知道可以使用这样的代码在iphone中发送短信:[[UIApplication sharedApplication] openURL:@"sms:12345678"]; 但这样 ...

  6. iOS开发基础知识--碎片44

    iOS开发基础知识--碎片44  iOS开发基础知识--碎片44 1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = ...

  7. IOS开发基础之微博项目第1天-OC版

    IOS开发基础之微博项目第1天-OC版 纯代码创建的项目,具有参考价值 该资料来自2014年7月3号,虽然时间过去较长,但是oc和swift不同,oc语法迭代更新慢 具有一定的参考意义 涉及xib加载 ...

  8. IOS开发基础之网易新闻UICollectionView的使用第3天

    IOS开发基础之网易新闻UICollectionView的使用第3天 由于第3天的UICollectionView 并不实现,我查阅相关资料,也没解决,先从本地的plist加载的数据,不是网络的上的数 ...

  9. IOS开发基础之异步下载网络图片第1部分

    IOS开发基础之异步下载网络图片第1部分 加入ATS // LJAppInfo.h // 37-异步下载网络图片 // Created by 鲁军 on 2021/3/10. #import < ...

最新文章

  1. 13个你一定要知道的PyTorch特性
  2. mysql20数据_mysql 插入20万条数据
  3. 流利说统一可观察性平台实践
  4. win10系统安装Redis3.2.100
  5. 如何保障一场千万级大型直播?
  6. 索引( index )
  7. mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】
  8. android usb挂载分析---vold处理内核消息
  9. 常用的ADB命令介绍
  10. 全面解读人工智能、大数据和云计算的关系
  11. ALive:淘宝双11直播,技术同学却可以“偷懒”?
  12. 嵌入式开发中三种操作系统的分析与比较
  13. 自步学习(Self-paced Learning)
  14. 亚马逊aws服务取消_Amazon S3 – AWS简单存储服务
  15. 显示隐藏图片html,JavaScript实现显示和隐藏图片
  16. Win10系统Anaconda+TensorFlow+Keras 环境搭建教程
  17. 一台电脑登陆两个微信账号
  18. 杭州师范大学c语言程序设计机试,杭州师范大学C语言试题第3套.pdf
  19. python打印七段数码管引脚图_前辈学51单片机的感悟是怎么样的?说说看
  20. HAUT 1262 魔法宝石 暴力思想,多种解决方案

热门文章

  1. ae怎么做圆一圈圈扩散效果_轻备学院AE特效基础教程 - 如何制作一个带有动画效果村庄烟雾...
  2. ubuntu KDE桌面
  3. leetcode算法题--Assign Cookies
  4. C/C++中链接属性
  5. python统计文本中单词出现次数
  6. Android 显示、隐藏状态栏和导航栏
  7. 关于CENTOS6.X下修改网卡名称的方法
  8. 团队-及格成绩查询系统-设计文档
  9. python 列表去重(数组)的几种方法
  10. 深入 理解 Statement 和 PreparedStatement