以完全保真度渲染 UIView 以进行保存

Posted

技术标签:

【中文标题】以完全保真度渲染 UIView 以进行保存【英文标题】:Render UIView in full fidelity for saving 【发布时间】:2012-10-31 21:47:17 【问题描述】:

我的应用程序允许用户在背景图像上合成图像(添加然后旋转、缩放、移动)并将最终编辑保存到相机胶卷。

主要编辑 ViewController 的视图是 UIView 层次结构的顶部。在此视图中,我将 UIImageView 添加为子视图,其中包含来自相机胶卷或相机的图像。用户然后添加额外的字符(狗、猫等),每个都实现为一个单独的 UIView,可以旋转、移动和缩放。

当用户完成编辑后,我想以可用的最高分辨率将整个场景保存到相机胶卷 - iphone4 上背景图像 1936X2592 像素(UIImageView)的分辨率。

目前我使用下面的代码,但这只是给我场景的显示分辨率,而不是内存中图像的完整分辨率。有什么建议么? (我尝试在下面的代码中将上下文大小增加到完整的背景大小,但没有运气)

// create a CG context
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, [UIScreen mainScreen].scale);

// render into the new context
[view.layer renderInContext:UIGraphicsGetCurrentContext()];

// get the image out of the context
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

【问题讨论】:

您是否尝试将view.frame 设置为保存前的1936x2592? 【参考方案1】:

答案似乎很简单,在这个线程https://***.com/a/11177322/207616中也有解释

在调用 renderInContext 之前简单放大绘图上下文以实现所需的输出图像大小

CGContextScaleCTM(context, scaleFactor, scaleFactor);

【讨论】:

以上是关于以完全保真度渲染 UIView 以进行保存的主要内容,如果未能解决你的问题,请参考以下文章

UIView 的快照视图在上下文中渲染/绘制,没有任何内容

渲染到窗口帧缓冲区和 FBO 以保存全尺寸纹理图像

怎样保存渲图

有条件地调用 React Hook “useEffect”。在每个组件渲染中,必须以完全相同的顺序调用 React Hooks

RenderingPath 渲染路径

是否可以保存带有参数的函数指针以供以后使用?