以 3D 形式将 CATransformLayer 渲染为 PNG

Posted

技术标签:

【中文标题】以 3D 形式将 CATransformLayer 渲染为 PNG【英文标题】:Render CATransformLayer to PNG in 3D 【发布时间】:2014-06-25 05:17:57 【问题描述】:

我正在尝试将包含多个 CAShapeLayer 的 CATransformLayer 渲染为 png 文件。我知道如何设置基本渲染并且确实有效。

虽然当我在 CATransformLayer 上调用 renderInContext 时,它会将所有内容展平为 2D 并完全忽略我的变换矩阵(旋转和/或透视)。

如何将我的 3d CATransformLayer 及其所有 CAShapeLayer 渲染为 PNG / UIImage?

【问题讨论】:

根据文档,renderInContext: 不渲染 3D 转换。问题:您是否只针对 ios 7 及更高版本? 嗯,我明白了。是的,我愿意。在 iOS 7 中是否有一种简洁的方法? 【参考方案1】:

由于您只针对 iOS7 及更高版本,我建议您放弃 renderInContext: 并将其替换为 -[UIView drawViewHierarchyInRect:afterScreenUpdates:]。你的代码可能看起来像这样:

UIGraphicsBeginImageContext(sizeOfYourImage);

[yourViewToRender drawViewHierarchyInRect:(CGRect)0, 0, sizeOfYourImage afterScreenUpdates:YES];

UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

【讨论】:

谢谢!让我开心:) 虽然知道一种无需先在屏幕上显示就可以渲染它的方法会很酷。 @Max 嗯,在使用此技术之前,您不必先在屏幕上显示视图。事实上,我刚刚做了一个测试项目,它呈现了一个视图层次结构,它没有作为子视图添加到任何其他视图,它工作得很好。 啊,太好了!这意味着我还可以渲染比屏幕更大的图像,这很好。您知道这种或其他技术是否适用于在应用了 3D 变换的情况下渲染为 PDF(用于矢量图形导出,将 CAShapeLayers 的 3D 层次结构渲染为 PDF)? 不幸的是,我对 iOS 上的 PDF 渲染不太熟悉,但我至少可以为您指出描述如何 generate PDF content 的文档。既然您知道如何从视图层次结构中获取 UIImage,我想如果您能找到一种方法将该图像呈现为 PDF,那么您就可以开始了。希望有帮助! 简而言之,终于可以使用 drawViewHierarchyInRect 捕获包含活动 CATransform3D 的图像。哇哦!

以上是关于以 3D 形式将 CATransformLayer 渲染为 PNG的主要内容,如果未能解决你的问题,请参考以下文章

使用CATransformLayer制作3D图像和动画

在iphone中的3D容器盒内绘制一个3D盒子

如何在 WPF 中使用 Xbim 以 3D 形式可视化 .IFC

腾讯滨海大厦智能楼宇3D可视化管理系统-优锘科技-ThingJS物联网开发案例

医学影像图 2D3D 展示

医学影像图 2D3D 展示