Как я могу получить CGImageRef из файла?

Итак, я знаю, что вы можете получить CGImage из файла с помощью UIImage...

UIImage *img = [UIImage imageNamed:@"name.bmp"];
[img CGImage];

Но есть ли способ получить CGImageRef без использования UIImage?

(Я пытаюсь сделать это в статической библиотеке, которая не имеет доступа к UIKit). Я мог бы использовать другие фреймворки, если это необходимо, а не UIKit. Будет ли работать CIImage? Или NSBitmapImageRep?

Ответ 1

Вы можете получить его из NSData:

CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((CFDataRef)[NSData dataWithContentsOfFile:@""]);
CGImageRef image = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault); // Or JPEGDataProvider

Вы должны быть уверены, что данные были JPEG или PNG для этого.

Ответ 2

Вы должны понимать, что с помощью [UIImage imageNamed: @ "name.bmp" ] работает через UIKit framework. Это не является потокобезопасным. Пример для 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);