在高分辨率iOS设备中拍摄时,ScreenShot太大

时间:2019-02-18 09:46:40

标签: ios objective-c

当我在高分辨率iOS设备中为全屏尺寸的屏幕截图时,结果图像数据非常大。例如,iPhoneX的分辨率为812 * 375,屏幕比例为3。因此,完整屏幕快照的ARGB图像大约需要812 * 3 * 375 * 3 * 4字节,即10.4MB。因此,当我在应用程序中使用这些屏幕快照图像时,内存使用率将跃升至较高水平,并且可能会触发内存警告。

这是我的代码:

if (CGRectIsEmpty(self.bounds)) {
        return nil;
}
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen] scale]);
[self drawViewHierarchyInRect:self.bounds
           afterScreenUpdates:NO];
UIImage *renderImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

即使我压缩了屏幕快照图像,内存使用仍然存在一些脉动。

enter image description here

所以我的问题是:有什么好方法可以拍摄高分辨率的屏幕截图并避免占用内存吗?

1 个答案:

答案 0 :(得分:0)

在处理图像时,我也遇到了同样的问题-内存使用率过高会导致内存警告和崩溃,尤其是在较旧的设备(iPhone 4)上使用UIImageJPEGRepresentation方法时。因此,我尝试通过将图片保存到Gallery并随后将其获取来避免使用此方法,但这并没有多大帮助,无论如何内存跳转仍然存在。

我认为“脉冲”是由于在转换过程中将整个数据复制到内存中引起的。可能的解决方案是实现自定义磁盘缓存和解码机制,以便可以分块处理数据,但仍然不知道是否值得这样做。对我来说,这个问题仍然存在,也许following list可能会有所帮助。

另请参阅this问题。

其他解决方案是,如果可能的话,以didReceiveMemoryWarning方法释放视图控制器资源。