在Cocoa应用程序中,我有16x16和32x32 @2x
版本的图像: 。当图像在NSImageView中显示时Mac OS X 总是选择更高分辨率的版本(即在非视网膜显示器上缩小@2x
图像而不是使用1:1版本。)
(左边的IB =好的,右边正在运行的app =缩小的混乱)
当然,我已将两个图片添加到项目中(image.png
和image@2x.png
)。
如果我从应用套装中删除@2x
图像,则OS X将显示分辨率较低的图像。
无论Xcode(4.6.2)是否将它们组合成.tiff(并且我已检查组合的.tiff包含两个图像),都会发生错误。
奇怪的是,这只发生在这个特定的图像上。相同项目中的其他1x / 2x图像与屏幕DPI正确显示。
怎么可能?!图像必须满足除大小和文件名模式以外的一些特殊标准吗?
答案 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?