我完全被这里难过;我有一系列小图像,我正在修补和制作按钮:
正如你所看到的那样,它们都非常清晰锐利,并且在我打开预览中的png文件时保留了这一点。
但是,当我在Interface Builder中的NSButtons
和NSImageViews
中使用它们时,将Scaling设置为None:
图像变得非常模糊。我究竟做错了什么?我不知道从哪里开始和尝试什么;我应该回到图标并尝试让它们像素完美吗?是否与抗锯齿或其他方面有关?
修改 出于某种原因,似乎NSButtons和NSImageViews正在加载图像的高分辨率版本,即使我在正常显示器上,可以通过我添加到它们的轻微浅蓝色笔划来识别。出于某种原因,Quartz Debug不会将这些识别为高分辨率图像,并且没有红色调。删除对@ 2x图像的引用确实解决了问题......但是......
答案 0 :(得分:5)
如果您在WWDC 2012
的第一部分的Advanced Tips and Tricks for High Resolution on OS X
视频NSImage
中查看会话245,您就会找到原因。
NSImage
没有任何高分辨率的概念 - 它只使用像素所占空间的最小像素 - 所以如果你的NSImageView
尺寸大于你的1x图像,它将使用2x图像,因为它有更多的像素。
答案 1 :(得分:3)
我以前遇到过这个问题。似乎如果您的图像的DPI不是72,则图像尺寸将是错误的。您可以使用下面的代码获得实际大小。
NSImage *image = [NSImage imageNamed:@"image"];
NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
NSSize size = NSMakeSize([rep pixelsWide], [rep pixelsHigh]);
[image setSize: size];
答案 2 :(得分:1)
在Interface Builder和[NSImage imageNamed:]
中指定图像名称时,请务必使用foo
代替foo.png
。虽然iOS足够聪明,可以在后一种情况下添加@2x
,但Mac OS X则不然。它会在后一种情况下加载非视网膜图像,但会在第一种情况下添加@2x
(如果存在这样的图像)。
答案 3 :(得分:0)
您是在IB或代码中将图像分配给Buttons
吗?
如果您是在代码中执行此操作,可能会创建图像的副本(例如[myImage copy]
),并将该副本分配给您的按钮可能会解决此问题。
答案 4 :(得分:0)
在我的情况下(在自定义NSOutlineView中绘制图标),我必须确保drawRect的x,y原点被舍入为int值:
NSMakeRect( round(NSMinX(cellFrame)-iconSize.width),
round(NSMidY(cellFrame)-(iconSize.height/2.0f)), …);
答案 5 :(得分:0)
这实际上是对早先关于DPI的帖子的回应,但我无法直接回复它。该帖子中的代码为我提供了真正的像素尺寸(也就是说,它没有表明任何问题)。然而,图像DPI绝对是我案件的罪魁祸首。我看到的症状是:
有麻烦的图像是72以外的DPI。当我以72 DPI重新创建图像时,上述所有行为都消失了。
这是一个相当混乱的问题 - 我希望这有助于某人!
答案 6 :(得分:0)
对我来说,我只需要将图像缩放设置为无:
在Interface Builder中
代码
NSImageCell *image;
[image setImageScaling:NSImageScaleNone];
NSButtonCell *button;
[button setImageScaling:NSImageScaleNone];