如何在iphone sdk上将NSData转换为CGDataProviderRef?

时间:2010-08-21 01:22:06

标签: iphone uiimage cgcontext cgimage

我在CGContextDrawImage调用中遇到EXEC_BAD_ACCESS错误并尝试追溯它。 我有一个PNG图像并运行UIImagePNGRepresentation o它给我NSData实例。

我需要将其转换为CGImageRef实例,因此我可以使用此CGImageRef运行CGImageCreateWithPNGDataProvider方法。

我试过两种方法: 1)投下它。

CGImageRef ref =(CGDataProvider)nsdata;

2)运行CGDataProviderCreateWithCFData(nsdata);

第一种情况返回空图像,但命令不会失败。 我尝试第二种情况的原因,即使我有NSData而不是CFData是因为我记得读它接受两者。 无论是什么原因,它都因此而失败。

有没有办法可以使用我的PNG NSData创建一个没有损坏的CGImage? 请帮忙。

感谢

2 个答案:

答案 0 :(得分:9)

你的第二次尝试几乎是正确的。 CFData和NSData是“免费桥接”。任何接受CFDataRef的东西也接受NSData(反之亦然) - 你只需要正确投射。

你需要:

CGDataProviderCreateWithCFData((CFDataRef)myNSData);

答案 1 :(得分:3)

第一个是非常错误的。您无法仅通过投射将NSData实例转换为CGImageRef

第二个应该可以正常工作。您必须将NSData实例投射到CFDataRef,但由于Apple称之为免费桥接,这是完全合法的。

这是另一种更简单的方法:

NSData* data = ... get raw image data from somewhere (PNG, JPEG, etc.) ...;
UIImage* image = [UIImage imageWithData: data];
CGImageRef imageRef = image.CGImage;

我更喜欢使用更高级UIImage方法来加载图像,然后使用image.CGImage来获得更低级别的Core Graphics功能。如果您需要保留它,请不要忘记正确保留UIImage