3

我正在开发一个将图像的部分复制到该图像的其他部分的应用程序。复制的逻辑工作正常,但是当我想提供撤消功能时遇到了问题。

当前的解决方案是保存一个最多包含 5 个 UIImage 的数组,然后使用堆栈中倒数第二个对象进行还原。当使用非常大的图像时,这会导致各种内存问题。例如,该数组中可能有 5 个 5MB 的图像。

这是我目前的两个想法。

  1. 与其保存包含所有更改的全新图像,不如仅保存所做的更改,就像 Photoshop 中的图层一样。我可以将 5 层堆叠在一起,当我用完层时,合并底部的两层并创建一个新层。如果用户在一层上复制整个图像,我可能仍然会遇到问题。这是不太可能的。

  2. 像我一样保存整个图像,但将其保存到文件系统。这将保持内存空闲,但我不确定设备不断保存 5MB 图像的强度会有多大。我会将其限制为保存 5 张图像。

任何其他想法或为什么两者中的一个会比另一个更好?

4

2 回答 2

2

我会考虑的一个选项是通过存储信息以进行图像编辑来实现命令模式。当需要显示图像时,可以通过处理当前的命令来生成。至多,您将在任何给定时间将原始图像和编辑版本保存在内存中。

这也有助于解决“撤消”问题,因为您现在可以从数组中删除命令项。

于 2013-07-11T16:39:19.163 回答
1

由于大小和内存限制,我将使用以下方法访问图像:

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];

[UIImage imageWithData:imageData];

这应该用于将图像保存到文件系统,以根据需要减少内存使用。

确保您启用了 ARC!您想自动释放未使用的对象。

于 2013-07-11T16:40:07.207 回答