2

我正在做一些相对于缩放图像的绘图,所以我最终得到了分数 CGPoints。我正在缩放 CoreImage 人脸检测例程的结果。

CGPathAddLineToPoint当我在通话中使用这些点时,我是想自己四舍五入还是留给 iOS 来做?如果舍入更好,我应该向上舍入还是向下舍入?

我已经阅读了有关像素边界等的信息,但我不确定如何在这里应用它。我正在画一个CALayer

CGPoint leftEye = CGPointMake((leftEyePosition.x * xScale), 
                              (leftEyePosition.y * yScale));

// 结果

features {
    faceRect = "{{92, 144.469}, {166.667, 179.688}}";
    hasLeftEyePosition = 1;
    hasMouthPosition = 1;
    hasRightEyePosition = 1;
    leftEyePosition = "{142.667, 268.812}";
    mouthPosition = "{176, 189.75}";
    rightEyePosition = "{207.333, 269.531}";
}
4

1 回答 1

12

你是否圆了,朝什么方向,取决于你想要达到的效果。

CoreGraphics 本身对分数坐标绝对没有问题。但是,使用分数坐标绘制任何东西最终都会对绘制的对象进行抗锯齿处理。这通常会使它们看起来很模糊。适当地舍入坐标是避免这种情况的好主意。

但是请注意。根据您绘制的内容和方式,您可能需要 0.5 像素的坐标而不是积分坐标。例如,如果您正在绘制一条线,则该线将以您提供的坐标为中心。因此,在积分坐标上绘制的 1 像素线实际上最终会成为 2 像素宽的模糊线(每个像素占线的一半)。要记住的最简单的事情是笔触以坐标为中心,但填充以它们为界。所以在填充矩形时,最好使用积分坐标。描边矩形时,将坐标插入 0.5 个像素(或者,更确切地说,插入要使用的描边宽度的一半)。

Also, don't forget that when drawing an image that's meant to be displayed on a retina screen with scale=2, coordinates that are 0.5 units off are actually still on pixel boundaries. So if you know it's retina, you can avoid rounding to fully integral coordinates when the nearest half-unit coordinate is fine.

于 2013-01-21T23:53:10.023 回答