4

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

错误的图像
(左边的 IB = 好的,右边的正在运行的应用程序 = 缩小的混乱)

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

如果我从应用程序包中删除@2x图像,那么 OS X 将显示较低分辨率的图像。

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

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

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

4

2 回答 2

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 会正确选择图像。

于 2013-05-21T00:43:46.450 回答
2

原来是NSImageprefersColorMatch属性 [1]:

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

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

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

[2]特定的 PNG 压缩类型是否与 macOS Cocoa 应用程序不兼容?

于 2017-07-25T13:19:52.560 回答