从CALayer获取CGImage(或UIImage)

6
我创建了一个CALayer (我向该图层添加了几个形状,但最终只有一个CALayer),现在我想将它添加到一个CGImage中,但是我遇到了很多麻烦。我找到了一些关于[CALayer renderInContext:ctx]的参考资料,但我不确定如何实现它。
有人以前做过这个吗?
2个回答

12

试试这个...

UIGraphicsBeginImageContext(layer.bounds.size);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

最新文档指出所有的 UIGraphics*Context 函数只能在主线程中运行(所以它们在任何操作系统版本上都不是线程安全的)。CGBitmapContextCreate 是线程安全的 CoreGraphics 函数,而 UIGraphicsBeginImageContext 就是基于它构建的。 - rpetrich
还从文档中可以了解到:讨论 只有在当前图形上下文是基于位图的图形上下文时,才应调用此函数。如果当前上下文为nil或未通过调用UIGraphicsBeginImageContext创建,则此函数返回nil。 - TomH
1
请记住,苹果从未完成编写renderInContext的工作,官方文档(2013年)仍然声明它不支持Quartz / CALayer渲染的大部分功能 - 我曾因这些苹果漏洞而遇到过图层完全消失的严重问题。 - Adam

1
创建一个位图图形上下文,并使用renderInContext:将图层绘制到其中。现在您已经拥有了一个图像中的图层。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接