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