UIImage簡談:[UIImage imageNamed:]與 [UIImage imageWithContentsOfFile]的區(qū)別

[UIImage imageNamed:]只適合與UI界面中小的貼圖的讀取,而一些比較大的資源文件應(yīng)該盡量避免使用這個接口。

直接讀取文件路徑[UIImage imageWithContentsOfFile]來解決圖片的讀取問題

這兩種方式的主要區(qū)別在于:

imageName的方式會在使用的時候系統(tǒng)會cache,程序員是無法處理cache的,這是由系統(tǒng)自動處理的,對于重復(fù)加載的圖像,速度會提升很多,這樣反而用戶體驗好。所以如果某張圖片需要在應(yīng)用中使用多次,或者重復(fù)引用,使用imageName的方式會更好

imageWithContentsOfFile的方式,在使用完成之后系統(tǒng)會釋放,不會緩存下來,所以也就沒有這樣的問題。一般也不會把所有的圖片都會緩存。有些圖片在應(yīng)用中只使用一兩次的,就可以用這樣的方式,比如新手引導(dǎo)界面的圖片等等,就適合這樣的方式。沒有明顯的界限。

imageWithContentsOfFile生成的UIImage會隨著path的文件內(nèi)容改變而改變,

比如你從相冊中選擇n張photo存入數(shù)組,如果你將得到的jpg命名為相同的xx.jpg, 然后用imageWithContentsOfFile存入數(shù)組,你的數(shù)組中的UIImage會不斷改變。

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);

通過這個方法,我們可以創(chuàng)建出一個CGImageRef類型的對象,下面分別對參數(shù)進(jìn)行解釋:sizt_t是定義的一個可移植性的單位,在64位機器中為8字節(jié),32位位4字節(jié)。

width:圖片寬度像素

height:圖片高度像素

bitsPerComponent:每個顏色的比特數(shù),例如在rgba-32模式下為8

bitsPerPixel:每個像素的總比特數(shù)

bytesPerRow:每一行占用的字節(jié)數(shù),注意這里的單位是字節(jié)

space:顏色空間模式,例如const?CFStringRef?kCGColorSpaceGenericRGB 這個函數(shù)可以返回一個顏色空間對象。

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)

這個方法用于創(chuàng)建mask圖片圖層,可以設(shè)置其顯示部分與不顯示部分達(dá)到特殊的效果,參數(shù)意義同上。

CGImageRef?CGImageCreateCopy(CGImageRef?image) ?這個方法可以復(fù)制一個CGImageRef對象

CGImageRef?CGImageCreateWithJPEGDataProvider(CGDataProviderRef source,?const?CGFloat?decode[],?bool?shouldInterpolate, CGColorRenderingIntent?intent)

通過JPEG數(shù)據(jù)源獲取圖像

CGImageRef?CGImageCreateWithPNGDataProvider(CGDataProviderRef?source,

?const?CGFloat?decode[],?bool?shouldInterpolate,

?CGColorRenderingIntent?intent)

通過PNG數(shù)據(jù)源獲取圖像

CGImageRef?CGImageCreateWithImageInRect(CGImageRef?image,

?CGRect?rect)

截取圖像的一個區(qū)域重繪圖像

CGImageRef?CGImageCreateWithMask(CGImageRef?image,?CGImageRef?mask)

截取mask圖像的某一區(qū)域重繪

CGImageRef?CGImageCreateWithMaskingColors(CGImageRef?image,

?const?CGFloat?components[])

通過顏色分量數(shù)組創(chuàng)建位圖

CGImageRef?CGImageCreateCopyWithColorSpace(CGImageRef?image,

?CGColorSpaceRef?space)

通過顏色空間模式復(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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容