我一直在关注这个主题的论坛已经有一段时间了,但仍然没有清楚地了解如何成功地为Retina Display在Core Data中存储图像。
据我所知,通过核心数据存储图像对每个人来说可能并不是最好的,但是在出于某种原因这样做的情况下,了解如何读取和显示这些图像非常重要。
由于图像没有文件扩展名,因此视网膜版本(如果存在)显然不能有2倍的扩展名。
所以我希望有人可以告诉我如何最好地存储通过应用程序创建的位图图像的分辨率,以便它们在视网膜和非视网膜设备中都能获得最佳显示效果。
例如,如果在我的非视网膜3GS iPhone上我有一个显示55x60图像的UIImageView,我目前存储的图像为“缩略图”,为55x60。
在视网膜显示器上,显然我想要显示110x120的图像。
但是,由于我无法在核心数据中创建具有扩展名的图像,我将如何进行此操作?
如果我决定创建一个将用于两个设备的图像,我是否只使用110x120图像?这是如何工作的 - 它会使用视网膜显示设备的完整图像并缩小非视网膜设备的图像吗?或者(并且我希望不是)它会为非视网膜设备缩小图像并将其再次缩放为视网膜吗?
提前致谢!
答案 0 :(得分:2)
首先:不要将图像存储在Core Data中。将图像存储在文件系统(即文档目录)上并使用Core Data存储引用更容易(并且更高效!)。
也就是说,如果您坚持使用Core Data存储该数据,您可以存储Retina版本,然后检测您何时使用非视网膜设备并对非Retina版本进行内存扩展
答案 1 :(得分:0)
部分原因是您希望在CoreData中存储UIImages,以便您的图像不会被操作系统自动“清除”吗?
如果没有,您应该按照Wayne的说法进行操作,只需在Documents目录中创建对文件路径的引用。
如果“清理”是您要避免的问题,那么只需将UIImage的NSData存储为NSManagedObject的属性之一,然后在使用时适当地缩放它。或者,您可以在将图像放入CoreData之前始终缩放图像。