GAS*_*GAS 5 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?请帮忙.
谢谢
你的第二次尝试几乎是对的.CFData和NSData是"免费桥接".任何接受CFDataRef的东西也接受NSData(反之亦然) - 你只需要正确投射.
你需要:
CGDataProviderCreateWithCFData((CFDataRef)myNSData);
Run Code Online (Sandbox Code Playgroud)
第一个是非常错误的。您不能简单地通过强制转换将NSData实例转变为实例。CGImageRef
第二个应该可以正常工作。您必须将NSData实例强制转换为 a CFDataRef,但由于 Apple 称之为免费桥接,这是完全合法的。
这是另一种更简单的方法:
NSData* data = ... get raw image data from somewhere (PNG, JPEG, etc.) ...;
UIImage* image = [UIImage imageWithData: data];
CGImageRef imageRef = image.CGImage;
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用更高级别的UIImage方法来加载图像,然后用于image.CGImage较低级别的 Core Graphics 功能。UIImage如果您需要保留它,请不要忘记妥善保留它。