如何在调用UIGraphicsBeginImageContext后保存CGContextRef?

时间:2012-09-20 05:46:44

标签: iphone ios

我希望能够在调用CGContextRef之后保存UIGraphicsBeginImageContext以便稍后在后台线程中使用它,该后台线程负责每1/25秒传送图像。

每次从后台线程调用选择器时使用UIGraphicsBeginImageContext时遇到的问题是创建上下文需要时间,而且每隔1/25秒就无法绘制一个图像。

我尝试使用CGBitmapContextCreate,但我得到的图像质量与UIGraphicsBeginImageContext()-->[image drawInRect]

创建的图像质量相同

我尝试在UIGraphicsBeginImageContext上调用viewDidLoad并在其后保存CGContextRef,以便我可以在以后的调用中使用它,但上下文以某种方式被释放,所以我得到了“{调用CGContextDrawImage: invalid context 0x0后出现“{1}}”错误 我之后从[image drawInRect]获得的图片为UIGraphicsGetImageFromCurrentImageContext()

是否可以在应用程序的整个生命周期内开始使用单个图像上下文?如果有,怎么样?或者请告知是否有其他选项可以保存我的上下文。

1 个答案:

答案 0 :(得分:0)

首先,在一个线程上创建图形上下文然后将其传递给另一个线程是一件令人困惑的事情。只需在后台线程中创建图形上下文。

其次,由于UIGraphicsBeginImageContext操纵UIKit的图形上下文堆栈,因此尝试保存它创建的CGContext并稍后使用它(可能是在您调用UIGraphicsEndImageContext之后)会很困惑。如果您保留CGContextRef,它可能会有效;我没试过。

您应该做的只是直接使用Core Graphics API。使用CGBitmapContextCreate创建您的上下文,使用CGImage从中获取CGBitmapContextCreateImage,并在必要时使用CGImageUIImage转换为+[UIImage imageWithCGImage:]