1

我正在尝试将一些图像加载移动到背景中。目前我正在后台加载 UIImages 但从我所阅读的内容来看,这不是建议的方法,而是我应该在后台加载 CGImageRef,然后在主线程中从它加载 UIImage。

问题是当我尝试创建一个时CGImageRef,它会返回为空。示例代码:

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 为空,但 uiImage 不是。有什么想法我在这里做错了吗?似乎这应该很简单?

4

1 回答 1

4
CGImageCreateWithPNGDataProvider()

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

[UIImage imageWithData: imageData]

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

这就解释了为什么第一个函数会失败,而第二个函数会成功。

于 2012-11-05T21:29:02.057 回答