代码之家  ›  专栏  ›  技术社区  ›  Tony

将位图存储为临时文件以实现撤消和重做功能是个好主意吗?

  •  2
  • Tony  · 技术社区  · 15 年前

    在我的项目中,我对位图的像素做了很大的更改,我想给这个项目添加撤消重做功能。由于在虚拟机内存中保存几个位图不是一个好主意,我认为我唯一的选择是将历史(位图)存储为临时文件。在开始实现之前,我想确定我正在做什么。有点不傻。

    3 回复  |  直到 15 年前
        1
  •  2
  •   deorst    15 年前

    取决于处理能力和要维护的撤消历史记录的长度。如果您可以以合理的速度应用转换,那么您只需保留位图X操作的副本,在撤消操作的情况下,只需对其应用最后的X-1转换。

        2
  •  2
  •   Bryan Denny    15 年前

    你需要多快才能撤消?记住:记忆比任何东西都快。

    您需要多少个位图才能返回并撤消?如果很多,那么是的,临时文件可能是最好的。

    如果他们关闭应用程序,稍后再回来(或者应用程序被杀死以释放内存),会怎么样?去做那些事有多重要?如果这很重要,那么您需要将它们保存到磁盘上。

    图像有多大?这也会影响你在记忆中能记住多少。

    也许两者都考虑一下?保存最新的内存并将其和所有其他文件保存到磁盘?

        3
  •  2
  •   hackbod    15 年前

    无论堆中是否有空间,将撤消状态存储在持久存储中(而不是临时文件)都是您唯一的选择。用户可以离开您的应用程序,此时您的进程将被终止。返回后,您需要使用上次看到的相同状态重新启动应用程序。您自己堆中的任何内容都将不再存在;您不能将大位图放在OnSaveInstanceState()中的捆绑包中。所以您需要将它们放在持久存储中。

    只需确保在这样做的时候不要阻塞UI——异步地写一个新的状态来更新UI。