[UIImage imageNamed:]只適合與UI界面中小的貼圖的讀取愉烙,而一些比較大的資源文件應(yīng)該盡量避免使用這個(gè)接口。
直接讀取文件路徑[UIImage imageWithContentsOfFile]來(lái)解決圖片的讀取問(wèn)題
這兩種方式的主要區(qū)別在于:
imageName的方式會(huì)在使用的時(shí)候系統(tǒng)會(huì)cache,程序員是無(wú)法處理cache的走芋,這是由系統(tǒng)自動(dòng)處理的陈症,對(duì)于重復(fù)加載的圖像,速度會(huì)提升很多赖瞒,這樣反而用戶體驗(yàn)好女揭。所以如果某張圖片需要在應(yīng)用中使用多次,或者重復(fù)引用栏饮,使用imageName的方式會(huì)更好
imageWithContentsOfFile的方式吧兔,在使用完成之后系統(tǒng)會(huì)釋放,不會(huì)緩存下來(lái)袍嬉,所以也就沒有這樣的問(wèn)題境蔼。一般也不會(huì)把所有的圖片都會(huì)緩存。有些圖片在應(yīng)用中只使用一兩次的伺通,就可以用這樣的方式箍土,比如新手引導(dǎo)界面的圖片等等,就適合這樣的方式罐监。沒有明顯的界限吴藻。
imageWithContentsOfFile生成的UIImage會(huì)隨著path的文件內(nèi)容改變而改變,
比如你從相冊(cè)中選擇n張photo存入數(shù)組弓柱,如果你將得到的jpg命名為相同的xx.jpg沟堡, 然后用imageWithContentsOfFile存入數(shù)組,你的數(shù)組中的UIImage會(huì)不斷改變矢空。
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;
CGImageRef?CGImageCreate(size_t?width,?size_t?height, size_t?bitsPerComponent,?size_t?bitsPerPixel,?size_t?bytesPerRow, CGColorSpaceRef?space,?CGBitmapInfo?bitmapInfo,?CGDataProviderRefprovider, const?CGFloat?decode[],?bool?shouldInterpolate, CGColorRenderingIntent?intent);
通過(guò)這個(gè)方法航罗,我們可以創(chuàng)建出一個(gè)CGImageRef類型的對(duì)象,下面分別對(duì)參數(shù)進(jìn)行解釋:sizt_t是定義的一個(gè)可移植性的單位妇多,在64位機(jī)器中為8字節(jié)伤哺,32位位4字節(jié)。
width:圖片寬度像素
height:圖片高度像素
bitsPerComponent:每個(gè)顏色的比特?cái)?shù),例如在rgba-32模式下為8
bitsPerPixel:每個(gè)像素的總比特?cái)?shù)
bytesPerRow:每一行占用的字節(jié)數(shù)立莉,注意這里的單位是字節(jié)
space:顏色空間模式绢彤,例如const?CFStringRef?kCGColorSpaceGenericRGB 這個(gè)函數(shù)可以返回一個(gè)顏色空間對(duì)象。
provider:數(shù)據(jù)源提供者
decode[]:解碼渲染數(shù)組
shouldInterpolate:是否抗鋸齒
intent:圖片相關(guān)參數(shù)
CGImageRef?CGImageMaskCreate(size_t?width,?size_t?height, size_t?bitsPerComponent,?size_t?bitsPerPixel,?size_t?bytesPerRow, CGDataProviderRef?provider,?const?CGFloat?decode[],?boolshouldInterpolate)
這個(gè)方法用于創(chuàng)建mask圖片圖層蜓耻,可以設(shè)置其顯示部分與不顯示部分達(dá)到特殊的效果茫舶,參數(shù)意義同上。
CGImageRef?CGImageCreateCopy(CGImageRef?image) ?這個(gè)方法可以復(fù)制一個(gè)CGImageRef對(duì)象
CGImageRef?CGImageCreateWithJPEGDataProvider(CGDataProviderRef source,?const?CGFloat?decode[],?bool?shouldInterpolate, CGColorRenderingIntent?intent)
通過(guò)JPEG數(shù)據(jù)源獲取圖像
CGImageRef?CGImageCreateWithPNGDataProvider(CGDataProviderRef?source,
?const?CGFloat?decode[],?bool?shouldInterpolate,
?CGColorRenderingIntent?intent)
通過(guò)PNG數(shù)據(jù)源獲取圖像
CGImageRef?CGImageCreateWithImageInRect(CGImageRef?image,
?CGRect?rect)
截取圖像的一個(gè)區(qū)域重繪圖像
CGImageRef?CGImageCreateWithMask(CGImageRef?image,?CGImageRef?mask)
截取mask圖像的某一區(qū)域重繪
CGImageRef?CGImageCreateWithMaskingColors(CGImageRef?image,
?const?CGFloat?components[])
通過(guò)顏色分量數(shù)組創(chuàng)建位圖
CGImageRef?CGImageCreateCopyWithColorSpace(CGImageRef?image,
?CGColorSpaceRef?space)
通過(guò)顏色空間模式復(fù)制位圖
CGImageRef?CGImageRetain(CGImageRef?image)
引用+1
void?CGImageRelease(CGImageRef?image)
引用-1
bool?CGImageIsMask(CGImageRef?image)
返回是否為Mask圖層
size_t?CGImageGetWidth(CGImageRef?image)
獲取寬度像素
size_t?CGImageGetHeight(CGImageRef?image)
獲取高度像素
下面這些方法分別獲取相應(yīng)屬性
size_t?CGImageGetBitsPerComponent(CGImageRef?image)
size_t?CGImageGetBitsPerPixel(CGImageRef?image)
size_t?CGImageGetBytesPerRow(CGImageRef?image)
CGColorSpaceRef?CGImageGetColorSpace(CGImageRef?image)CG_EXTERNCGImageAlphaInfo?CGImageGetAlphaInfo(CGImageRef?image)
CGDataProviderRef?CGImageGetDataProvider(CGImageRef?image)
const?CGFloat?*CGImageGetDecode(CGImageRef?image)
bool?CGImageGetShouldInterpolate(CGImageRef?image)
CGColorRenderingIntent?CGImageGetRenderingIntent(CGImageRef?image)
CGBitmapInfo?CGImageGetBitmapInfo(CGImageRef?image)