我希望能够在调用CGContextRef
之后保存UIGraphicsBeginImageContext
以便稍后在后台线程中使用它,该后台线程负责每1/25秒传送图像。
每次从后台线程调用选择器时使用UIGraphicsBeginImageContext
时遇到的问题是创建上下文需要时间,而且每隔1/25秒就无法绘制一个图像。
我尝试使用CGBitmapContextCreate
,但我得到的图像质量与UIGraphicsBeginImageContext()-->[image drawInRect]
我尝试在UIGraphicsBeginImageContext
上调用viewDidLoad
并在其后保存CGContextRef
,以便我可以在以后的调用中使用它,但上下文以某种方式被释放,所以我得到了“{调用CGContextDrawImage: invalid context 0x0
后出现“{1}}”错误
我之后从[image drawInRect]
获得的图片为UIGraphicsGetImageFromCurrentImageContext()
。
是否可以在应用程序的整个生命周期内开始使用单个图像上下文?如果有,怎么样?或者请告知是否有其他选项可以保存我的上下文。
答案 0 :(得分:0)
首先,在一个线程上创建图形上下文然后将其传递给另一个线程是一件令人困惑的事情。只需在后台线程中创建图形上下文。
其次,由于UIGraphicsBeginImageContext
操纵UIKit的图形上下文堆栈,因此尝试保存它创建的CGContext
并稍后使用它(可能是在您调用UIGraphicsEndImageContext
之后)会很困惑。如果您保留CGContextRef
,它可能会有效;我没试过。
您应该做的只是直接使用Core Graphics API。使用CGBitmapContextCreate
创建您的上下文,使用CGImage
从中获取CGBitmapContextCreateImage
,并在必要时使用CGImage
将UIImage
转换为+[UIImage imageWithCGImage:]
。