【问题标题】:Iphone Retina Display with Core Data user-generated images带有 Core Data 用户生成图像的 Iphone Retina 显示屏
【发布时间】:2011-12-08 22:42:31
【问题描述】:

我在这个论坛上关注这个话题已经有一段时间了,但仍然不清楚如何为 Retina Display 成功地将图像存储在 Core Data 中。

我了解通过 Core Data 存储图像可能不是对每个人都是最好的,但在出于某种原因进行存储的情况下,了解这些图像的读取和显示方式非常重要。

由于图像没有文件扩展名,retina 版本(如果存在)显然不能有 2x 扩展名。

所以我希望有人能告诉我如何存储通过应用程序创建的位图图像最好的分辨率,以便它们在视网膜和非视网膜设备上都具有最佳显示效果。

例如,如果在我的非视网膜 3GS iPhone 上我有一个显示 55x60 图像的 UIImageView,我当前存储的是 55x60 的图像“缩略图”。

在视网膜显示器上,显然我希望显示 110x120 的图像。

但是,由于我无法在 core-data 中创建带有扩展名的图像,我该怎么做呢?

如果我决定只创建一个用于两种设备的图像,我是否只使用 110x120 图像?它是如何工作的——它会使用视网膜显示设备的完整图像并缩小非视网膜设备的图像吗?或者(我希望不会)它会为非视网膜设备缩小图像并为视网膜再次放大它吗?

提前致谢!

【问题讨论】:

    标签: iphone core-data image-scaling retina-display


    【解决方案1】:

    首先:不要将图像存储在 Core Data 中。将图像存储在文件系统(即文档目录)上并使用 Core Data 存储 reference 更容易(并且性能更高!)。

    也就是说,如果您坚持使用 Core Data 来存储该数据,您可以存储 Retina 版本,然后检测您何时使用非 Retina 设备并对非 Retina 版本进行内存扩展.

    【讨论】:

    • 谢谢,我已经将图像存储在 CoreData 中,以后我会尝试更改它。 (旁注 - 在文件系统中存储图像不会使备份/恢复和 iCloud 存储变得更加复杂吗?)。无论如何,目前,我想找到在 Core Data 中存储图像的最佳解决方案。您是说如果我存储视网膜版本(在我的示例中为 110x120)它会自动在视网膜设备中显示该分辨率而不需要我做任何工作?那么,在我不做任何工作的情况下,它不会自动为非视网膜设备缩小图像吗?
    • 如果您的图像视图设置为这样做,它将缩放。
    • 我不认为它是特定于 imageView 的 - 我想我想问的是:当图像是核心数据图像时,是否有任何“自动”缩放(与带有通过 UIImage imagedNamed 等获取的扩展名)。如果不存在 2x 版本,则带有扩展名的图像会自动放大以用于视网膜显示。如果这是来自核心数据的图像,是否有任何基于设备的自动缩放?
    • 抱歉韦恩,重新阅读您的答案.. 只是为了澄清一下 - 什么是内存规模?
    • 使用图形上下文对其进行缩放:iphonedevelopertips.com/graphics/…
    【解决方案2】:

    您希望将 UIImage 存储在 CoreData 中以便操作系统不会自动“清理”您的图像的部分原因是什么?

    如果没有,您应该按照韦恩所说的做,只需在 Documents 目录中创建对文件路径的引用。

    如果“清理”是您要避免的问题,那么只需将 UIImage 的 NSData 存储为 NSManagedObject 的属性之一,然后在使用时适当地对其进行缩放。或者,您始终可以在将图像放入 CoreData 之前对其进行缩放。

    【讨论】:

    • 我使用 Core Data 是因为我在第一次启动时根据 Core Data Recipes 示例应用程序对图像存储进行了建模。目前,很多人都在积极使用该应用程序,我还没有准备好改变一切。如果我从头开始,那将是一个不同的答案......当我说我存储图像时,我使用 ImageToDataTransformer - 这与存储图像的 NSData 是一样的吗?在将图像放入核心数据之前,我确实会缩放图像,但我不确定如何最好地做到这一点,以使视网膜显示正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2011-04-24
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多