来自NSData的CGImageRef为null,但UIImage不是?

时间:2012-11-05 17:19:04

标签: objective-c ios uiimage cgimageref

我正在尝试将一些图像加载到后台。目前我在后台加载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不是。我在这里做错了什么想法?好像这应该很简单?

1 个答案:

答案 0 :(得分:4)

CGImageCreateWithPNGDataProvider()
如果提供的数据不是PNG格式(例如JPEG或TIFF),则

返回nil

[UIImage imageWithData: imageData]

返回所有支持的图像文件格式(PNG,JPEG,TIFF等)的图像

这解释了为什么第一个函数在第二个函数成功时失败的原因。