如何确保绘图操作在Mac上按像素对齐?

时间:2011-02-17 13:03:59

标签: ios objective-c performance cocoa ownerdrawn

在最近的iOS techtalk中,我听到了一个关于“确保您的绘制操作是像素对齐”的建议。

这是对Mac / iOS绘图性能的有效建议吗?

另一个问题是我如何确定我的代码是使用像素对齐绘制的? 是否有任何工具或技巧可以帮助?

2 个答案:

答案 0 :(得分:8)

像素对齐与性能无关,但与渲染图形的质量无关。

解释它的最好方法是展示一些代码:

//Assume this is drawing in a rect such as a button or other NSView
NSBezierPath *line = [NSBezierPath bezierPath];
[line moveToPoint:NSMakePoint(0,0)];
[line lineToPoint:NSMakePoint(200,0)];
[[NSColor redColor] set];
[line stroke];

如果你试用这段代码,你会看到一条红线。如果仔细观察,线条将不会非常清晰 - 红色将被冲洗掉,宽度看起来大约为2像素宽。原因是Cocoa中的绘图使用的是点,而不是像素。结果是在两个像素之间绘制线条。 (有关更多信息,请阅读文档中的可可绘图指南。)

现在,如果我们做一些简单的改变......

//Assume this is drawing in a rect such as a button or other NSView
NSBezierPath *line = [NSBezierPath bezierPath];
[line moveToPoint:NSMakePoint(0,0.5)];
[line lineToPoint:NSMakePoint(200,0.5)];
[[NSColor redColor] set];
[line stroke];

执行此代码,您将看到最初可能的输出。

关于这一点可以说很多,但基本上将你的积分抵消0.5,你应该没问题。

答案 1 :(得分:2)

使用OS X 10.7+,您还希望使用backingAlignedRect:options:在窗口坐标中生成“ ..支持存储像素对齐矩形。”。