【问题标题】:Retina version of an image always used on non-retina display始终在非视网膜显示器上使用的图像的视网膜版本
【发布时间】:2013-05-20 23:58:22
【问题描述】:

在 Cocoa 应用程序中,我有 16x16 和 32x32 @2x 版本的图像:。当图像在 NSImageView 中显示时,Mac OS X总是选择更高分辨率的版本(即在非视网膜显示器上缩小 @2x 图像,而不是使用 1:1 版本)。


(左侧的 IB = 良好,右侧正在运行的应用 = 缩小的混乱)

当然,我已经将这两个图像都添加到了项目中(image.pngimage@2x.png)。

如果我从 app bundle 中删除 @2x 图片,那么 OS X 将显示分辨率较低的图片。

无论 Xcode (4.6.2) 是否将它们合并到 .tiff 中,都会发生该错误(并且我检查了合并后的 .tiff 是否包含两个图像)。

奇怪的是,这只发生在这个特定的图像上。同一项目中的其他 1x/2x 图像正确显示与屏幕 DPI 匹配。

这怎么可能?!除了大小和文件名模式之外,图像是否必须满足某些特殊标准?

【问题讨论】:

    标签: macos cocoa retina-display


    【解决方案1】:

    谜团解开:OS X 不喜欢混合类型的 PNG。

    $ file *.png
    image.png: PNG image data, 16 x 16, 8-bit gray+alpha, non-interlaced
    image@2x.png: PNG image data, 32 x 32, 8-bit colormap, non-interlaced
    

    如果两个文件都被强制使用相同的颜色模式(即都是灰色或都是调色板),那么 OS X 会正确选择图像。

    【讨论】:

    • 我有同样的问题,但我的图片类型相同。
    【解决方案2】:

    原来是NSImageprefersColorMatch属性[1]:

    默认值为是。颜色匹配和分辨率匹配都可能影响图像表示的选择。

    可以在 Interface Builder [2] 的 User Defined Runtime Attributes 中设置为 NO

    [1]https://developer.apple.com/documentation/appkit/nsimage/1520010-preferscolormatch

    [2]Are specific PNG compression types incompatible with macOS Cocoa apps?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多