12

我想允许用户选择一张照片,而不限制大小,然后对其进行编辑。

我的想法是创建一个与屏幕大小相同的大照片的缩略图进行编辑,然后在编辑完成后,使用大照片进行与缩略图相同的编辑。

当我使用UIGraphicsBeginImageContext创建缩略图时,它会导致内存问题。

我知道由于硬件限制,很难直接编辑整个大图像,所以我想知道是否有一种方法可以将大图像降采样到小于 2048*2048 而不会出现内存问题?

我发现有一个BitmapFactory类有一个inSampleSize可以在 Android 平台上对照片进行下采样的选项。如何在 iOS 上做到这一点?

4

3 回答 3

10

您需要使用UIImage它来处理图像加载,它实际上不会将图像加载到内存中,然后以您想要的结果图像的大小创建位图上下文(因此这将是使用的内存量)。然后,您需要从原始图像(这是将部分图像数据加载到内存中的位置)迭代多次绘制图块,CGImageCreateWithImageInRect使用CGContextDrawImage.

请参阅Apple 的此示例代码

于 2013-11-16T10:33:24.270 回答
1

大图像不适合内存。因此将它们加载到内存中然后调整它们的大小是行不通的。

要处理非常大的图像,您必须平铺它们。已经有很多解决方案,例如看看这是否可以解决您的问题:

https://github.com/dhoerl/PhotoScrollerNetwork

我实现了自己的自定义解决方案,但那是特定于我们的环境的,我们已经有一个运行服务器端的图像切片器,我可以只请求特定的大图像切片(madea 服务器,这真的很酷)

平铺工作的原因是基本上你只将可见像素保留在内存中,并且没有那么多。当前不可见的所有切片都被分解到磁盘缓存或闪存缓存中。

于 2014-07-04T01:30:32.117 回答
0

看看 Trevor Harmon 的这项工作。它提高了我的应用程序的性能。我相信它也对你有用。

https://github.com/coryalder/UIImage_Resize

于 2013-11-15T22:21:54.640 回答