【问题标题】:Updating saved images for Retina Display为 Retina Display 更新保存的图像
【发布时间】:2010-11-23 01:36:28
【问题描述】:

我有一个 iPhone 应用程序,除其他外,它允许用户存储照片。将新照片添加到应用程序的数据存储区时,我会缓存该图像的缩略图版本,以便在合理的时间内加载照片缩略图网格。

问题在于,这些缩略图在前 Retina 显示屏上看起来很棒,但在 RD 显示屏上看起来有点模糊。图像无法使用还不错,但我真的希望能够为用户使用我的旧版本应用保存的图像获得 Retina Display 的全部优势。

问题在于重新创建所有这些缩略图需要的时间太长了。在我的测试中,在我的 iPhone 4 上将示例数据库重新编码为高分辨率缩略图(当然是大缩略图)大约需要一分半钟。在旧硬件上情况会更糟。

我该如何解决这个问题?鉴于上述性能结果,进行一次性迁移似乎是不可能的。其他选项是懒惰地缩小缩略图(即当它们显示在屏幕上时),然后将它们保存到数据库中。满是旧图片的屏幕在第一次查看时会很迟钝,之后会变得更流畅。

还有其他方法可以考虑吗?其他人遇到过这个问题吗?

【问题讨论】:

    标签: iphone uiimage resolution retina-display


    【解决方案1】:
    1. 我不喜欢您尝试转换图像的想法。
    2. 用户很快就会变得不耐烦,并说您的应用程序有问题并且需要很长时间才能加载。
    3. 我认为您无需对全尺寸图像进行任何重新处理即可解决问题。
    4. 在较旧的硬件上,您将没有视网膜显示器(因此无需放大图像)。如果他们有 Retina 显示屏,那么他们就有了速度很快的 iPhone iPod。

    我建议您通过显示缩略图的方式以图形方式解决问题。所以不是全屏,而是在这个图像周围加上一个边框,并以它的真实分辨率显示它(不要放大它)。或者在通常显示 1 的位置显示 4 张图像(因为 iPhone 屏幕的分辨率是 4 倍)。

    您可以对缩略图进行双三次上采样,而不是对原始海量图像进行重新采样,使其大小变为 4 倍。这会使它稍微模糊,但它应该比 iPhone 缩放看起来更好,这看起来真的很糟糕。上采样将是超快的,因为它使用小图像。

    我无法帮助您进行上采样,但在某处会有一些代码。

    干杯,约翰。

    【讨论】:

    • -1。图像在 GPU 上被有效地视为纹理,并且(据我所知)默认使用双三次插值。
    • 老兄!你把我记下来,你是不对的。非视网膜显示图像不使用双三次插值显示。像素加倍。 1 个像素变成 4 个相同颜色的像素,看起来像素化和锯齿状。 Bicubic 不会将像素翻倍,并为您提供更平滑的图像。请更正您的反对意见。
    【解决方案2】:

    满是旧图像的屏幕在第一次查看时会很迟钝,之后会变得更流畅。

    不必迟钝。

    这是一个的痛苦,但您可以在后台线程中完成大部分处理。将线程优先级设置为较低的值(如 0.1)以避免使 UI 太慢。最简单的方法是为您需要转换的每个图像设置一个 NSOperation,并将它们添加到 maxConcurrentOperationCount=1 的 NSOperationQueue。

    如果写入不是原子的,则在 -applicationDidEnterBackground: 或 -applicationWillTerminate: 中(或在侦听相应通知通知的内容中),执行[queue cancelAllOperations]; for (NSOperation * operation in queue) { [operation setThreadPriority:1]; } [queue waitUntilAllOperationsAreFinished]; 之类的操作;您大约需要 10 秒左右,这应该足以让图像转换完成写入磁盘(从而避免半写文件)。为增加保护,请在写入前立即检查[operation isCancelled],如果它可能需要超过 10 秒。显然,在-applicationWillEnterForeground:中,你应该重新开始转换(记住有些图像已经被转换了)。

    跟踪并发问题很有趣...

    (请注意,[data writeToFile:path atomically:YES] 是不够的——如果应用程序在写入过程中被终止,它可能会留下临时文件。如果可以的话,我建议将缩略图存储在 Core Data 中,但这可能会超出现有应用程序的问题。)

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多