【问题标题】:What is the point of the @2x for Retina display apps?@2x for Retina 显示应用的意义何在?
【发布时间】:2012-02-24 20:59:14
【问题描述】:

我知道 Retina 显示屏的像素是非 Retina 显示屏的 2 倍,但使用 @2x 版本与拍摄和拍摄 512 x 512 图像并通过帧大小限制它有什么区别?

澄清:

如果我有一个 72 x 72 的按钮,在 iPhone 上显示它的正确方法是有一个

image.png = 72x72

image@2x.png = 144 x 144

但为什么不只使用 1 张图片:

图像.png = 512x512

然后做这样的事情:

UIImageView *myImage = [[UIImageView alloc] init ];
[myImage setImage:[UIImage imageNamed:@"image.png"]];
[myImage setFrame:CGRectMake(50, 50, 72, 72)];

我确定有充分的理由,我只是不知道它是什么,否则可能是较小的应用程序文件大小?

感谢您的教育!

【问题讨论】:

  • BTW 72*2 是 144 而不是 114。在下面的回答中,我使用 iPhone 的应用程序图标大小(57x57 和 114x114)作为示例。

标签: ios xcode uiimage retina-display


【解决方案1】:

正确调整图像大小有几个很好的理由,但最主要的原因必须是图像清晰度:调整图像大小时,您通常最终会出现使图片看起来浑浊或像素化的伪影。通过以正确的尺寸创建图像,您将确切地知道最终用户将在他或她的屏幕上看到什么。

另一个原因只是为了减少二进制文件的整体文件大小:16x16 图标占用的字节数比 512x512 图像少几个数量级。

如果您需要第三个原因:[UIImage imageWithName:@"xxxx"] 等便捷方法会生成实际大小的图像,并且通常不需要额外的帧/边界代码来配合它们。如果你知道大小,你可以省去很多麻烦。

【讨论】:

  • 感谢您的深入回答... :)
【解决方案2】:

因为调整大小时图像可能无法正确显示。也因为更大的图像使用更多的内存。但是,如果这两个对您来说都不是问题,您可以将一张图像用于视网膜和非视网膜显示器。

【讨论】:

  • 这是正确答案。在大多数情况下(除非正在设计一款高图形游戏),无法区分视网膜图片和非视网膜图片。这是经验。
【解决方案3】:

因为大图像会消耗大量内存和 CPU/GPU 周期。另一个原因是缩小图像会导致像素级质量问题。

【讨论】:

    【解决方案4】:

    除了额外的内存和 CPU 之外,对图像进行下采样本质上是有损的。漂亮的清晰渲染的线条变成了杂物。

    【讨论】:

    • 如果在编译时进行下采样,则设备上不会使用额外的内存或 CPU。第二个参数是有效的。
    • 问题的全部意义(无论如何,正如我所读)是关于在运行时调整大小。
    【解决方案5】:

    如果源图像与显示的图像大小完全相同,则存在@2x 命名约定。然后你可以为非视网膜 iPhone 设置一个 57x57 的应用程序图标,为视网膜显示 iPhone 设置一个 114x114 的应用程序图标。

    【讨论】:

      【解决方案6】:

      使用 2 张图片的主要优点是,两张图片都可以由设计师手工制作,因此一切看起来都很好,并且不需要放大或缩小代码,这会耗费能源、降低性能并可能包含错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 2014-12-29
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        相关资源
        最近更新 更多