- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在使用以下代码从 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
将返回较小的图像,但是该应用程序需要更高的图像分辨率才能进行缩放。
此外,使用 Assets 的字节大小是不可靠的,因为高度压缩的格式(例如 JPG)在打包后的大小可能很小,但如果它们的像素大小很高(低细节图像、高度压缩的图像),仍然会消耗太多内存.
任何有关如何获取图像尺寸并事先检测到这种情况以便我可以取消加载并显示错误或如何获取如此大 Assets 的较小版本的任何输入都将不胜感激。
最佳答案
更新:
在评论中进行了一些讨论。
您可以通过调用获取文件/ Assets 的Exif信息
[asset metadata]
我找到的引用在这里sarofox.alasset-image-metadata该页面还显示了如何获取各个属性。这应该允许您在打开文件/ Assets 之前获取像素大小。
我的旧答案:
在下面,以防有人觉得这个想法有帮助。:
这只是一个猜测。 但是你能不能不使用 ALAssetRepresentation getBytes:fromOffset:length:error:
使用您期望的设备相机图像的字节大小。
从文件大小的开头使用 fromOffset 运行检查。以及文件大小的(想要的最大)末尾的长度。
读取缓冲区中的大小。如果它小于请求那么你没问题。如果它与请求的范围完全相同,那么文件中可能还剩下更多(可能更大。)
如果是这样,运行一个新请求 getBytes:fromOffset:length:error:* 这次使用来自上一个请求的长度和新长度的 fromOffset。
然后您可以将结果相加并确定整个文件是否太大。
但永远不要有太大的缓冲区/文件
关于iphone - 从 ALAssetRepresentation 设置 CGImageRef 的最大尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840307/
我正在使用以下内容从 ALAssetRepresentation 创建一个 NSData 对象,以导出图像文件并从中创建一个 md5 哈希: - (NSUInteger)getBytes:(uint8
我有一个 ALAssetRepresentation 问题。有一个表格以高分辨率显示图库图像。 fullScreenImage 方法花费太多时间,并且表格运行缓慢。如何实现更快的加载?例如,图库图像加
我有一些代码包装了一个 ALAsset 对象,该对象是从枚举 ALAssetLibrary 中的 Assets 中检索到的。我收到有关用户遇到崩溃的报告,其中部分包装器对象向其包含的 ALAsset
我的主要问题是我需要获取 ALAsset 对象的缩略图。 我尝试了很多解决方案并搜索了数天的堆栈溢出,由于这些限制,我发现的所有解决方案都不适合我: 我无法使用默认缩略图,因为它太小了; 我无法使用全
我正在上传相机胶卷中的视频和图像。上传完成后,我得到 32 字节的内存泄漏。仪器显示泄漏在下方 NSUInteger readStatus = [rep getBytes:buffer from
我正在编写一个多线程应用程序,它需要在后台从 ALAssetsLibrary 上传照片。所以我有一个 NSOperation 子类,它通过 Assets 的 URL 找到适当的 ALAsset 并将图
小问题:保证 ALAssetRepresentation URL(其“url”属性)指向同一 Assets 多长时间? documentation describes it as 'persisten
当我尝试访问照片流中的图片时,有时 [asset defaultRepresentation] 方法返回 nil。 根据文档,如果 Assets 在本地(尚)不可用,则可能会发生这种情况。 This
我正在尝试使用 CGImageSourceCreateThumbnailAtIndex有效地创建图像的调整大小版本。我有一些现有代码可以使用磁盘中的图像执行此操作,现在我正在尝试使用来自 ALAsse
我有一个返回 ALAsset 数据的方法。我为一个又一个 Assets 调用此方法,以从它们获取 NSData 并将其上传到服务器。每 4 或 5 次调用后,代码就会卡在下面的 rep.size 调用
这是我在 UITableViewDataSource View Controller 中的方法 - (UITableViewCell *)tableView:(UITableView *)tableV
我正在从我的 UITableView 中的 Assets 加载图像,我注意到我遇到了与从 defaultAssetRepresentation.fullResolutionImage.CGImage.
给定一个 ALAssetRepresentation,是否有可能得到它的全分辨率修饰图像? 如果我使用 fullResolutionImage 方法,我会得到全分辨率图像,但未以任何方式调整。 如果我
我正在尝试使用 fullScreenImage 方法从 ALAssetRepresentation 获取正确旋转的 UIImage。我有几张以不同设备方向拍摄的测试照片;照片在照片应用程序中正确显示。
我正在使用 ALAssetLibrary 从我的相机胶卷中获取我正在制作的自定义 View 的图像。这样做非常简单: library.enumerateGroupsWithTypes(ALAssets
我目前正在使用以下代码从 iOS 应用中的 ALAsset 获取 UIImage。 ALAssetRepresentation *rep = [self.asset defaultRepresenta
当用户在 iOS 的内置 Photos.app 中对照片进行一些更改(裁剪、消除红眼等)时,这些更改不会应用到 fullResolutionImage 由相应的 ALAssetRepresentati
在我的应用程序(在 iOS 4 下运行)中,我收集了通过 选择的图片UIImagePickerController .不幸的是,升级到 iOS 5 后我遇到了一个奇怪的问题。 简而言之,我存储 ALA
我注意到,对于图像,字典 ALAssetRepresentation.metadata 包含两个名为“PixelHeight”和“PixelWidth”的键。我的问题是:是否可以保证所有图像都存在这些
我有以下从 ALAssetRepresentation 中提取数据的代码。 ALAssetRepresentation *representation = ...; size_t size = [re
我是一名优秀的程序员,十分优秀!