所以我知道你可以使用UIImage的文件的CGImage
...如何從文件中獲取CGImageRef?
UIImage *img = [UIImage imageNamed:@"name.bmp"];
[img CGImage];
但是,有沒有辦法讓一個CGImageRef
不使用UIImage
?我可以使用其他框架,如果有必要,只是不是UIKit。我可以使用其他框架,如果有必要,只是不UIKit。 CIImage
會工作嗎?或者NSBitmapImageRep
?
所以我知道你可以使用UIImage的文件的CGImage
...如何從文件中獲取CGImageRef?
UIImage *img = [UIImage imageNamed:@"name.bmp"];
[img CGImage];
但是,有沒有辦法讓一個CGImageRef
不使用UIImage
?我可以使用其他框架,如果有必要,只是不是UIKit。我可以使用其他框架,如果有必要,只是不UIKit。 CIImage
會工作嗎?或者NSBitmapImageRep
?
您可以從NSData的得到它:
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((CFDataRef)[NSData dataWithContentsOfFile:@""]);
CGImageRef image = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault); // Or JPEGDataProvider
你必須要肯定的是,數據是JPEG或PNG這個工作。
甜!謝謝!你知道是否有辦法做到這一點的BMP?有沒有CGImageCreateWithBMPDataProvider ... – 2010-05-14 14:42:10
不,對不起,我認爲你將不得不通過UIImage路線爲:( – 2010-05-14 15:21:23
這真的幫了我,但你應該知道,你必須釋放內存, CGImageRef'和下面的'CGImageRelease(image);' – taymless 2014-02-06 16:51:31
你必須明白,使用[UIImage imageNamed:@「name.bmp」]通過UIKit框架工作。這不是線程安全的。 dispatch_apply的例子你必須使用Quartz框架。
// Through Quartz
NSString *maskFilePath = [[NSBundle mainBundle] pathForResource:@"mask" ofType:@"png"];
CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename([maskFilePath UTF8String]);
CGImageRef maskRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault);
ImageIO.framework將可用,但除此之外,您不能簡單地通過純CG函數讀取BMP。 – kennytm 2010-05-07 18:54:50
出於好奇,從UIImage加載圖像有什麼危害?是否有顯着的記憶差異? – MrHen 2010-05-07 20:42:32
我正在做單元測試。我們正在編寫的靜態庫需要一個CGImageRef。我想通過從我有的測試文件中傳入一個來測試它。我嘗試在我的單元測試項目中加載UIKit,並且使用UIImage方式,但它從來沒有奏效。我認爲這是因爲我的單元測試項目不是一個視圖應用程序 – 2010-05-07 21:13:27