macos - 始终在非视网膜显示屏上使用的图像的视网膜版本

标签 macos cocoa retina-display

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

wrong image
(左侧的 IB = 良好,右侧正在运行的应用程序 = 缩小的困惑)

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

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

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

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

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

最佳答案

谜团已解: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 会正确选择图像。

关于macos - 始终在非视网膜显示屏上使用的图像的视网膜版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660082/

相关文章:

objective-c - 我可以向在 NSTextFieldCell 中绘制的 NSImage 添加操作吗?

iphone - iPad 上的视网膜显示屏图形无法显示 - 为什么?

javascript - 如何选择页面中的所有图像?

python - 无法关闭 Mac 上的 wxPython 窗口

cocoa - cocoa 中的 HIViewSetZOrder 等效项

objective-c - 从窗口坐标转换 NSPoint

cocoa - 如何确定鼠标在 View 中单击的位置(X&Y)?

iOS @2x 适用于非视网膜且无法正确缩放

macos - OSX 上默认的 kerberos 凭证缓存是什么?

cocoa - 为什么我的基于 QTKit 的图像编码应用程序这么慢?