我目前正在使用以下代码从 iOS 应用程序中的 ALAsset 获取 UIImage。
ALAssetRepresentation *rep = [self.asset defaultRepresentation];
CGImageRef ref = [rep fullResolutionImage];
ALAssetOrientation orientation = [[self.asset valueForProperty:@"ALAssetPropertyOrientation"] intValue];
UIImage *image = [UIImage imageWithCGImage:ref scale:1.0 orientation:(UIImageOrientation)orientation];
只要图像相当小(例如,用设备的相机拍摄),这种方法就可以很好地工作。但是,如果图像太大(6000px^2 或更大),应用程序将在此步骤中耗尽内存:
CGImageRef ref = [rep fullResolutionImage];
我想在应用程序崩溃或(理想情况下)为返回的图像设置最大尺寸之前检测到这种情况。
我知道这fullScreenImage
将返回一个较小的图像,但是该应用程序需要从图像中获得更高的分辨率才能进行缩放。
此外,使用资产的字节大小是不可靠的,因为高度压缩的格式(如 JPG)可能在打包后的大小很小,但如果它们的像素大小很高(低细节图像、高度压缩的图像),仍然会消耗过多的内存。
任何有关如何获取图像尺寸并事先检测这种情况的输入,以便我可以取消加载并显示错误或如何获得如此大资产的较小版本,将不胜感激。