日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

IOS疯狂基础之UIImage

發(fā)布時(shí)間:2025/7/25 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS疯狂基础之UIImage 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

CGImage和CGImageRef這兩個(gè)應(yīng)當(dāng)是用來(lái)重繪圖形的類,它們?cè)趹?yīng)用時(shí)是按照?qǐng)D像的像素矩陣來(lái)繪制圖片的,它們可以用來(lái)處理bitmap。

CGImageRef與UIImage的互轉(zhuǎn)

CGImageRef轉(zhuǎn)換成UIImage CGImageRef

iOffscreen = CGBitmapContextCreateImage(context);

UIImage* image = [UIImage imageWithCGImage: iOffscreen];

UIImage轉(zhuǎn)換成CGImageRef

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

CGImageRef cgimage=loadImage.CGImage;



顯示部分圖片,如 加載的圖片高為768,美工常常這樣,我只要截取748,就需要用到以下代碼

?NSString* imagePath = [[NSBundlemainBundle]?pathForResource:@"主頁(yè)面"?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的區(qū)別

如題,是不是大家為了方便都這樣加載圖片啊

myImage = [UIImage imageNamed:@"icon.png"];
那么小心了
這種方法在一些圖片很少,或者圖片很小的程序里是ok的。
但是,在大量加載圖片的程序里,請(qǐng)千萬(wàn)不要這樣做。
為什么呢 ???????

這種方法在application bundle的頂層文件夾尋找由供應(yīng)的名字的圖象 。 如果找到圖片,裝載到iPhone系統(tǒng)緩存圖象。那意味圖片是(理論上)放在內(nèi)存里作為cache的。

試想你圖片多了,是什么后果``````
圖片cache極有可能不會(huì)響應(yīng) memory warnings and release its objects

所以,用圖片的時(shí)候一定要小心的alloc和release
推薦使用
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFile:path];

用UIImage加載圖像的方法很多,最常用的是下面兩種:

??? 1、用imageNamed函數(shù)

[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的方式加載圖像。其實(shí)這兩種加載方式都有各自的特點(diǎn)。

??? 1)用imageNamed的方式加載時(shí),系統(tǒng)會(huì)把圖像Cache到內(nèi)存。如果圖像比較大,或者圖像比較多,用這種方式會(huì)消耗很大的內(nèi)存,而且釋放圖像的 內(nèi)存是一件相對(duì)來(lái)說(shuō)比較麻煩的事情。例如:如果利用imageNamed的方式加載圖像到一個(gè)動(dòng)態(tài)數(shù)組NSMutableArray,然后將將數(shù)組賦予一 個(gè)UIView的對(duì)象的animationImages進(jìn)行逐幀動(dòng)畫,那么這將會(huì)很有可能造成內(nèi)存泄露。并且釋放圖像所占據(jù)的內(nèi)存也不會(huì)那么簡(jiǎn)單。但是利 用imageNamed加載圖像也有自己的優(yōu)勢(shì)。對(duì)于同一個(gè)圖像系統(tǒng)只會(huì)把它Cache到內(nèi)存一次,這對(duì)于圖像的重復(fù)利用是非常有優(yōu)勢(shì)的。例如:你需要在 一個(gè)TableView里重復(fù)加載同樣一個(gè)圖標(biāo),那么用imageNamed加載圖像,系統(tǒng)會(huì)把那個(gè)圖標(biāo)Cache到內(nèi)存,在Table里每次利用那個(gè)圖 像的時(shí)候,只會(huì)把圖片指針指向同一塊內(nèi)存。這種情況使用imageNamed加載圖像就會(huì)變得非常有效。

??? 2)利用NSData方式加載時(shí),圖像會(huì)被系統(tǒng)以數(shù)據(jù)方式加載到程序。當(dāng)你不需要重用該圖像,或者你需要將圖像以數(shù)據(jù)方式存儲(chǔ)到數(shù)據(jù)庫(kù),又或者你要通過(guò)網(wǎng)絡(luò)下載一個(gè)很大的圖像時(shí),請(qǐng)盡量使用imageWithData的方式加載圖像。

??? 無(wú)論用哪種方式加載圖像,圖像使用結(jié)束后,一定要記得顯示釋放內(nèi)存。


《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的IOS疯狂基础之UIImage的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。