我在NSMenuItem
中显示动态加载的图片,如下图所示。
我加载并调整图像为:
[menuItem setImage:[self processImage: [[NSImage alloc] url]]];
[menu addItem:menuItem];
processImage
函数调整下载的88x88 px的大小。图像为24x24像素。 (如下图所示)。这使它看起来不像视网膜图片。但如果我把它保持在48x48px,它就不会像24x24一样小,所以NSMenuItem实际上并没有进行大小调整。
但是我需要以与48x48相同的视角显示这些图像。让它看起来像@ 2x。我无法找到一种方法来使用[NSMenuItem setImage:]
方法来执行此操作,或者不将NSImage
的内容保存为文件48x48,并使文件名以@2x
结尾。
如果我在setImage:
方法中使用48x48图像,NSMenuItem的高度只会增加两倍,它真正显示48点* 48点。
任何想法如何在不将内存图像保存到文件的情况下在NSMenuItem中实现视网膜图像?
答案 0 :(得分:5)
仅对像素数大于此值的图像执行[image setSize:NSMakeSize(24, 24)]
就足够了。 -setSize:
以磅为单位设置其逻辑大小。图像中的表示确定它具有多少像素。如果像素尺寸大于点尺寸,那么还有更多细节。如果绘图目标也是高分辨率,则可以使用此详细信息。
如果这不起作用,您可以构建图像"手动"通过以所需大小初始化它,创建具有可用细节的位图图像表示,设置该副本的大小和像素尺寸(单独),并将该表示添加到图像。
答案 1 :(得分:0)
我可能会误解,但你不能期望将图像缩放到24x24并让它神奇地显示在视网膜48x48上。您最好将图像保持为48x48并在非视网膜屏幕上自动缩小(仅将图像大小设置为24x24)
答案 2 :(得分:0)
你可以使用类方法imageWithSize:flipped:drawingHandler:
这将调用您的drawingHandler,以便在需要时以正确的分辨率实际绘制图像。如果创建大小为24x24的NSImage,则在将图像复制到非视网膜屏幕之前,将调用drawingHandler绘制24x24像素。在将图像复制到retna屏幕上之前,将调用它来绘制48x48像素。
如果移动在视网膜和非视网膜显示之间绘制NSImage的窗口,将再次调用drawingHandler。