加载图片的三种方式使用

//方法1    
UIImage *imag1 = [UIImage imageNamed:@"image.png"];    
//方法2    
UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];    
//方法3    
NSData *imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];    
UIImage *image3 = [UIImage imageWithData:imageData];    

第一种方法:imageNamed:

imageNamed的优点在于可以缓存已经加载的图片。这种方法会首先在系统缓存中根据指定的名字寻找图片,如果找到了就返回。如果没有在缓存中找到图片,该方法会从指定的文件中加载图片数据,并将其缓存起来,然后再把结果返回。对于同一个图像,系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在 一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。

第二种方法和第三种方法本质是一样的:imageWithContentsOfFile:和imageWithData:

而imageWithContentsOfFile方法只是简单的加载图片,并不会将图片缓存起来,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你

需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,可以使用这种方式。

如何选择
如果加载一张很大的图片,并且只使用一次,那么就不需要缓存这个图片。这种情况imageWithContentsOfFile比较合适,系统不会浪费内存来缓存图片。
然而,如果在程序中经常需要重用的图片,那么最好是选择imageNamed方法。这种方法可以节省出每次都从磁盘加载图片的时间。


Unity中加载外部图片方式有很多种,最常用的方式包括: 1. 使用WWW类加载外部图片 这种方式比较简单,可以通过WWW类加载外部图片并将其转换为Texture2D对象。代码示例如下: ```c# IEnumerator LoadImage(string url) { // 创建一个新的WWW对象来加载图片 WWW www = new WWW(url); yield return www; // 如果图片加载成功,则创建一个新的Texture2D对象并将图片数据复制到这个对象中 if (www.error == null) { Texture2D texture = new Texture2D(www.texture.width, www.texture.height); www.LoadImageIntoTexture(texture); } else { Debug.LogError("Failed to load image from " + url + ": " + www.error); } } ``` 2. 使用UnityWebRequest加载外部图片 UnityWebRequest是Unity新推出的网络请求API,功能更为强大,支持多种网络请求方式,包括HTTP、HTTPS、FTP等。使用UnityWebRequest加载外部图片的代码示例如下: ```c# IEnumerator LoadImage(string url) { // 创建一个新的UnityWebRequest对象来加载图片 UnityWebRequest request = UnityWebRequestTexture.GetTexture(url); yield return request.SendWebRequest(); // 如果图片加载成功,则获取Texture2D对象 if (!request.isNetworkError && !request.isHttpError) { Texture2D texture = ((DownloadHandlerTexture)request.downloadHandler).texture; } else { Debug.LogError("Failed to load image from " + url + ": " + request.error); } } ``` 3. 使用AssetBundle加载外部图片 如果你需要频繁加载大量的图片资源,那么可以考虑使用AssetBundle来管理和加载这些资源。具体的做法是将图片打包成AssetBundle,并在需要使用时通过AssetBundle.LoadAsset()方法来加载。代码示例如下: ```c# IEnumerator LoadImage(string url) { // 创建一个新的AssetBundle对象来加载图片 AssetBundle bundle = AssetBundle.LoadFromFile(url); // 如果AssetBundle加载成功,则获取Texture2D对象 if (bundle != null) { Texture2D texture = bundle.LoadAsset<Texture2D>("image"); } else { Debug.LogError("Failed to load image from " + url); } } ``` 以上三种方式都可以加载外部图片,选择哪种方式取决于你的具体需求。如果只需要加载少量的图片资源,可以使用第一种或第二种方式;如果需要频繁加载大量的图片资源,可以考虑使用AssetBundle来管理这些资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值