序列化CGContext

时间:2012-11-24 01:48:34

标签: objective-c core-graphics

如何序列化包含修改后的CGMutablePathRef的CGContext?

我目前将上下文保存到png表示中并对其进行序列化,但这会导致视网膜显示问题。

我想避免序列化视网膜版本并在运行时调整它的大小,因为这样效率很低。

1 个答案:

答案 0 :(得分:5)

如果您只是抚摸或填充单个路径,可以将其包装在符合UIBezierPath协议的NSCoding中,然后您可以序列化UIBezierPath:< / p>

UIBezierPath *uiPath = [UIBezierPath bezierPathWithCGPath:cgPath];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:uiPath];

然后您可以将data写入文件或数据库或其他任何内容。之后,您可以将data转换为UIBezierPath,然后转换为CGPath

UIBezierPath *uiPath = [NSKeyedUnarchiver unarchiveObjectWithData:data];
CGPathRef cgPath = uiPath.CGPath;

如果要绘制比单个路径更复杂的东西,以可缩放(矢量)格式序列化绘图的最简单方法是绘制到CGPDFContext而不是CGBitmapContext。 A CGPDFContext将您的绘图命令记录到PDF。稍后,您可以为PDF创建CGPDFDocument,并使用它将PDF绘制到位图上下文中。有关详细信息,请阅读PDF Document Creation, Viewing, and Transforming chapter of the * Quartz 2D Programming Guide*