iphone,UIImageView展现不同途径的图片的不同处理方式

本人正处于初学阶段,网上有很多各位前辈共享的很好的资料。此2篇文章是本人找到的比较好的文章,下面具体介绍:

1)iPhone开发中的图像处理相关要点 http://www.cnblogs.com/lovecode/archive/2011/11/27/2265275.html#commentform ,讲述4中方式途径加载图片;

下面转载的是iPhone开发中的图像处理相关要点的原文:

iPhone图像通常存储在以下4个地方:

  • 相册(PhotoAlums):用户可以使用UIImagePickerController类提供的交互对话框从该相册中获取图像。
  • 应用程序包:将图像与可执行程序、Info.plist文件和其他资源一同存储,用户可以通过本地文件路径由imageNamed:方法来读取这些基于包的图像。
  • 沙盒:借助沙盒,可以将文件存储到Documents、Library和tmp文件夹中。
  • 因特网(Internet):应用程序可通过URL资源从网上下载图像。

 图像文件的位置决定着读取该文件的具体方式。相册中的图片及其路径无法直接从应用程序访问,只有终端用户能够浏览和选择图像,使所选图像对应用程序可用。图像也不能由URL直接初始化。图像源不同读取方式也不同:

1. 从应用程序包加载图像

UIImage类提供了一种加载应用程序包中存储的任意图像的简单方法,即通过文件名及其扩展名调用imageNamed:方法。

myImage = [UIImage imageNamed:@"icon.png"];

 为避免本地图像缓存及其有效利用内存空间的问题,还可用imageWithContentsOfFile:替换,这个方法会返回从某一具体路径中加载的图像,这个路径需以参数形式提供。当然,若要从应用程序包中获取图像路径,可以查询NSBundle类为给定资源查找路径。示例代码:

NSString *path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"png"];
myImage = [UIImage imageWithContentsOfFile:path];

2. 从沙盒加载图像

默认情况下,每个沙盒包含3个文件夹:Documents、Library和tmp。图像等由应用程序生成的数据通常位于Documents文件夹内。在iPhone开发中可以通过调用实用工具主目录函数可靠地定位顶级沙盒文件夹。通过NSHomeDirectory()返回结果,我们可以向下导航一级到Documents文件夹,完全可以保证正确的位置。示例代码:

复制代码
NSString *documentsFolder()
{
return [NSHomeDirectory()
stringByAppendingPathComponent:@"Documents"];
}
// 加载图像
path = [documentsFolder() stringByAppendingPathComponent:@"image.png"];
return [UIImage imageWithContentsOfFile:path];
复制代码

3. 从URL资源加载图像

UIImage类可以从NSData实例加载图像,但它不能直接从URL字符串或NSURL对象加载图像。因此,只能为UIImage提供已经从URL下载的数据(即要创建由URL内容初始化的NSData实例)。

复制代码
NSURL  *url = [NSURL URLWithString:@"http://www.cnblogs.com/lovecode/images/demo.jpg"];
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url];

// 类似地我们可以直接创建个类方法
// 由具体的一个URL字符串,返回通过该资源构建的UIImage
+ (UIImage *) imageFromURLString: (NSString *) urlstring
{
return [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlstring]]];
}
复制代码

4. 从相册加载数据

UIImagePickerController类帮助我们从iPhone相册中选择图像。它提供一个独立的视图控制器,以模态形式呈现视图。该控制器发回的委托消息能够反映用户选择的图像。

  • UIImagePickerControllerSourceTypePhotoLibrary 所有同步到iPhone的图像以及包括用户拍摄的图片在内的任何相册。
  • UIImagePickerControllerSourceTypeSavedPhotosAlbum 仅含相册。
  • UIImagePickerControllerSourceTypeCamera 允许用户使用iPhone内置的摄像头拍照。

图像拾取器的委托必须遵守两个协议:UINavigationControllerDelegateUIImagePickerControllerDelegate。在接口中一定要为设置为拾取器委托的对象声明这两个协议。

2)使用UIImageView展现来自网络的图片 http://blog.csdn.net/jasonblog/article/details/7352483 ,讲述了如何使用UIImageView展现来自网络的图片。

 网络下载图片同样是self.imageView.image =[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlstring]]];

还讲述到图片下载的过程中会产生——阻塞UI线程的问题,使用的方法是NSOperationQueue来异步加载图片(还可以使用NSThread来异步加载图片)。

其次,还考虑到了缓存已经下载的图片(即在每次下载图片之前,先判断是否已经有缓存了,可以优化体验和性能)。保存到内存中比较简单,只需要用NSDictionary来维护即可。而保存到磁盘,涉及到本地文件读写,可以参考“文件和数据管理”。

具体可参见原文。

你可能感兴趣的:(imageview)