我正在尝试将一些图像加载到后台。目前我在后台加载UIImages,但是根据我的阅读,这不是建议的方法,而是我应该在后台加载CGImageRef,然后在主线程中加载UIImage。 / p>
问题在于,当我尝试创建CGImageRef
时,它会返回null。示例代码:
NSData * imageData = [NSData dataWithContentsOfFile: coverPath];
if(nil != imageData)
{
UIImage * uiImage = [UIImage imageWithData: imageData];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef) imageData);
CGImageRef imageRef = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);
NSLog(@"Test: %p, %p", imageRef, uiImage);
CGDataProviderRelease(provider);
}
哪个注销Test: 0x0, 0x1c566bb0
。这意味着imageRef为null但uiImage不是。我在这里做错了什么想法?好像这应该很简单?
答案 0 :(得分:4)
CGImageCreateWithPNGDataProvider()
如果提供的数据不是PNG格式(例如JPEG或TIFF),则返回nil
。
[UIImage imageWithData: imageData]
返回所有支持的图像文件格式(PNG,JPEG,TIFF等)的图像
这解释了为什么第一个函数在第二个函数成功时失败的原因。