Retina版本的图像始终用于非视网膜显示器

时间:2013-05-20 23:58:23

标签: macos cocoa retina-display

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

wrong image
(左边的IB =好的,右边正在运行的app =缩小的混乱)

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

如果我从应用套装中删除@2x图像,则OS X将显示分辨率较低的图像。

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

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

怎么可能?!图像必须满足除大小和文件名模式以外的一些特殊标准吗?

2 个答案:

答案 0 :(得分:5)

神秘解决: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会正确选择图像。

答案 1 :(得分:2)

原来是NSImage的{​​{1}}属性[1]:

  

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

可以在Interface Builder [2]中的用户定义的运行时属性中设置为prefersColorMatch

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

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