以完全保真度渲染 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 以进行保存的主要内容,如果未能解决你的问题,请参考以下文章
有条件地调用 React Hook “useEffect”。在每个组件渲染中,必须以完全相同的顺序调用 React Hooks