视网膜显示器上的NSCursor图像

时间:2012-08-18 19:57:40

标签: cocoa image-processing cursor nsimage

我正在尝试修改默认的工字形光标图像。我正在使用[[[NSCursor IBeamCursor] image] representations],将每个人通过CIFilter并将其添加到新图像中。但是,生成的光标看起来好像正在渲染低分辨率图像。

High Resolution Guidelines说:

  

对于自定义游标,您可以将多表示TIFF传递给NSCursor类方法initWithImage:hotSpot:

所以我希望这会起作用。此外,如果我获得原始图像的-TIFFRepresentation和我修改过的图像,并将它们写入磁盘,它们看起来都像具有相同大小图像的多页TIFF文件。我能做错什么?

3 个答案:

答案 0 :(得分:1)

我有一个暂时的解决方案:在每个图像表示上手动调用-setSize:,将像素高度和宽度除以屏幕的比例因子。但是,这种技术似乎并不适用于多屏幕。

答案 1 :(得分:1)

你是对的。我整天都在调试这个,我很确定我已经把它钉了。我的做法与你完全不同(我的图像是从文件中加载的),但最终结果完全一样。

技巧是将多表现图像的第一个表示设置为非视网膜大小。如果要从图像文件加载游标,则必须采取此额外步骤来调整要匹配的表示的大小。它不像你期望的那样“开箱即用”。

我在一台带有两台显示器的机器上进行了测试,并将窗口从视网膜显示器拖动到非视网膜显示器,显示光标的高/低分辨率图像。

答案 2 :(得分:1)

前一段时间我遇到了类似的问题:我将光标放在PDF中,它总是像1:1大小的像素图像一样被炸毁。在NSCursor: Using high-resolution cursors with cursor zoom (or retina)中有解决方法。

也许有人可以使用这种技术来解决这个问题?我的猜测是创建一个相同大小的图像,但不同的CTM标记它与Retina相同。 @jtbrandes正在做的事情可能标志着它是一个不同的大小和非Retina。因此,您有效地丢失了比例因子信息。如果您在提示中创建带有CTM的图像,也许您可​​以将过滤后的图像绘制到其中,并且可以正确检测到它。