为什么 view.layer.renderInContext() 对于相同大小的屏幕截图需要更多的临时内存
Why does view.layer.renderInContext() take higher amount of temporary memory for same size screenshot
我正在尝试截取固定大小和固定高度的 webView 的屏幕截图。 Web 视图可以呈现任何 webSite 。我注意到根据呈现的网站,webView.layer.renderInContext 使用的临时内存要高得多。我的理解是 renderInContext 首先在位图中生成屏幕截图,我认为当屏幕截图的高度和重量相同时,无论内容如何,位图都应始终具有相同的大小。我的理解不正确吗?
截图代码为:
autoreleasepool{
UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0)
webView.layer.renderInContext(UIGraphicsGetCurrentContext())
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
例子:
iphone 6 Plus 上的网页 http://www.biography.com/people/ellen-page-267545 的屏幕截图,宽度 = 375,高度 = 2000 CGFloat,占用 200MB 的临时内存。
iPhone 6 Plus 上的网页 http://en.m.wikipedia.org/wiki/Ellen_Page 的屏幕截图,宽度 = 375,高度 = 2000 CGFloat 需要 80MB 的临时内存。
我不是图形方面的专家,我想了解差异的原因,以及是否有另一种方法可以在不占用大量内存的情况下截取 scrollView 内容的屏幕截图。
另外,如果我能理解为什么当前的方法内存消耗会随着内容而变化,那将有助于我优化我的截图代码。
UIWebView 内部使用 CATiledLayer 渲染网页。根据呈现的网站,许多内部子层由 UIWebView 创建。当我们尝试在图像上下文中呈现 UIWebView 内容时,会进行递归调用以截取所有层的屏幕截图。
因此,根据 UIWebView 如何在内部构建 CATiledLAyer,屏幕截图代码使用的临时内存差异很大(60MB - >200MB)
我正在尝试截取固定大小和固定高度的 webView 的屏幕截图。 Web 视图可以呈现任何 webSite 。我注意到根据呈现的网站,webView.layer.renderInContext 使用的临时内存要高得多。我的理解是 renderInContext 首先在位图中生成屏幕截图,我认为当屏幕截图的高度和重量相同时,无论内容如何,位图都应始终具有相同的大小。我的理解不正确吗?
截图代码为:
autoreleasepool{
UIGraphicsBeginImageContextWithOptions(cgSizeToUse, false, 0)
webView.layer.renderInContext(UIGraphicsGetCurrentContext())
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
例子: iphone 6 Plus 上的网页 http://www.biography.com/people/ellen-page-267545 的屏幕截图,宽度 = 375,高度 = 2000 CGFloat,占用 200MB 的临时内存。
iPhone 6 Plus 上的网页 http://en.m.wikipedia.org/wiki/Ellen_Page 的屏幕截图,宽度 = 375,高度 = 2000 CGFloat 需要 80MB 的临时内存。
我不是图形方面的专家,我想了解差异的原因,以及是否有另一种方法可以在不占用大量内存的情况下截取 scrollView 内容的屏幕截图。
另外,如果我能理解为什么当前的方法内存消耗会随着内容而变化,那将有助于我优化我的截图代码。
UIWebView 内部使用 CATiledLayer 渲染网页。根据呈现的网站,许多内部子层由 UIWebView 创建。当我们尝试在图像上下文中呈现 UIWebView 内容时,会进行递归调用以截取所有层的屏幕截图。
因此,根据 UIWebView 如何在内部构建 CATiledLAyer,屏幕截图代码使用的临时内存差异很大(60MB - >200MB)