【问题标题】:Retina images from server display incorrectly in table cells来自服务器的 Retina 图像在表格单元格中显示不正确
【发布时间】:2011-06-28 07:58:43
【问题描述】:

我有一个表格,其中单元格的图像视图由以前从服务器上下载的图像填充。所以:

[[cell imageView] setImage:[[[UIImage alloc] initWithContentsOfFile:filePath] autorelease]];

其中“filePath”是这些图像的位置。工作得很好,直到我决定聪明一点,将视网膜显示图像添加到我的服务器。这些图像(显然是双倍尺寸)正在显示,但被缩小了。我将它们标记为 image@2x.png,希望 iPhone 只知道如何处理它们,但显然这在这种情况下不起作用。

我查看了讨论,我猜我需要对单元格的 imageView 的 contentsScale 做一些事情,比如将其与屏幕比例相匹配,但我不确定该怎么做。任何帮助表示赞赏。

【问题讨论】:

  • 我觉得它更多地与纵横比有关。否则其他一切似乎都很好。

标签: iphone objective-c


【解决方案1】:

您无法从服务器自动下载视网膜图像。

你需要一个像

这样的控件
if (iphone == 4) image=img@2x.png
else image=img.png

获取正确的图像。

【讨论】:

  • 查看此线程:stackoverflow.com/questions/3294100/… 了解如何检查设备是否具有视网膜屏幕。
  • 嗨帕斯卡。谢谢,但我想你误解了我的意思。我不是想自动化任何东西。我在服务器上有两个图像,我在其他地方有一些代码可以访问这两个图像并将它们保存到应用程序的文档目录中。这一切正常,图像加载到表格单元格中,但在 @2x 图像的情况下,它们看起来缩小了。
  • 也感谢@rckoenes。是的,我读过那个帖子。但这也不是我的问题。手机正在显示正确的图像(视网膜屏幕上的图像较大,否则较小)。但是当它是较大的图像时,图像会被缩小,因此它只填充单元格的 imageView 大小的一半。
【解决方案2】:

您需要正确设置图像的比例因子。请查看UIImage中的scale属性

如果您从一个文件加载图像 名称包括 @2x 修饰符, 比例设置为 2.0。如果文件名 不包括修饰符但 以 PNG 或 JPEG 格式,并具有 相关的 DPI 值,对应的 计算并反映比例因子 在这个属性。您还可以指定 一个明确的比例因子,当 从核心初始化图像 图形图像。所有其他图像都是 假设比例因子为 1.0。

所以你可以像上面一样读取你的图片,从中获取CGImage,然后使用+ (UIImage *)imageWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation创建一个新的UIImage。

更好的方法是检查视网膜图像的 DPI,并使用图形程序将其设置为 144dpi。根据 scale 属性文档,这也可能有效。

【讨论】:

    猜你喜欢
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多