IOS疯狂基础之UIImage
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相关推荐
- IOS疯狂基础之GIF图片的显示
2019独角兽企业重金招聘Python工程师标准>>> IOS疯狂基础之GIF图片的显示 iPhone SDK提供了多种动画手段,UIView.UIImageView和CALayer ...
- IOS疯狂基础之屏幕旋转控制,获得当前方向
获得当前屏幕方向 self.interfaceOrientation或[[UIApplication sharedApplication] statusBarOrientation] if (self ...
- IOS疯狂基础之隐藏系统键盘
最简单的办法--设置为不可用: [dateTo setUserInteractionEnabled:NO];//不弹出键盘 [dateFrom setEnabled:NO];//不弹出键盘 [[[UI ...
- IOS疯狂基础之键盘挡住输入框
一般来讲就是把整个屏幕上移么,不让键盘遮住 #pragma mark textField delegate 输入完后代理事件 - (void)textFieldDidEndEditing:(UITe ...
- IOS疯狂基础之MessageUI—短信
我们知道可以使用这样的代码在iphone中发送短信:[[UIApplication sharedApplication] openURL:@"sms:12345678"]; 但这样 ...
- iOS开发基础知识--碎片44
iOS开发基础知识--碎片44 iOS开发基础知识--碎片44 1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = ...
- IOS开发基础之微博项目第1天-OC版
IOS开发基础之微博项目第1天-OC版 纯代码创建的项目,具有参考价值 该资料来自2014年7月3号,虽然时间过去较长,但是oc和swift不同,oc语法迭代更新慢 具有一定的参考意义 涉及xib加载 ...
- IOS开发基础之网易新闻UICollectionView的使用第3天
IOS开发基础之网易新闻UICollectionView的使用第3天 由于第3天的UICollectionView 并不实现,我查阅相关资料,也没解决,先从本地的plist加载的数据,不是网络的上的数 ...
- IOS开发基础之异步下载网络图片第1部分
IOS开发基础之异步下载网络图片第1部分 加入ATS // LJAppInfo.h // 37-异步下载网络图片 // Created by 鲁军 on 2021/3/10. #import < ...
最新文章
- 13个你一定要知道的PyTorch特性
- mysql20数据_mysql 插入20万条数据
- 流利说统一可观察性平台实践
- win10系统安装Redis3.2.100
- 如何保障一场千万级大型直播?
- 索引( index )
- mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】
- android usb挂载分析---vold处理内核消息
- 常用的ADB命令介绍
- 全面解读人工智能、大数据和云计算的关系
- ALive:淘宝双11直播,技术同学却可以“偷懒”?
- 嵌入式开发中三种操作系统的分析与比较
- 自步学习(Self-paced Learning)
- 亚马逊aws服务取消_Amazon S3 – AWS简单存储服务
- 显示隐藏图片html,JavaScript实现显示和隐藏图片
- Win10系统Anaconda+TensorFlow+Keras 环境搭建教程
- 一台电脑登陆两个微信账号
- 杭州师范大学c语言程序设计机试,杭州师范大学C语言试题第3套.pdf
- python打印七段数码管引脚图_前辈学51单片机的感悟是怎么样的?说说看
- HAUT 1262 魔法宝石 暴力思想,多种解决方案