【问题标题】:How to draw horizontal & vertical lines one pixel wide in Quartz?如何在 Quartz 中绘制一个像素宽的水平和垂直线?
【发布时间】:2025-12-03 15:25:01
【问题描述】:

我无法绘制一像素宽的线条。所有线条都是完全水平或垂直的(我没有画对角线),但它们画得不干净。看起来它正在以降低的 alpha 跨越两个像素。毫无疑问是由于抗锯齿。我搜索了文档和论坛,发现有一个声明说“……画一个像素宽的水平和垂直线没有问题……”但我不知道到底是怎么回事。欢迎任何指点。

绘制代码很简单:

else if ([[value entity].name isEqualToString:@"RTLine"]) {

CGContextSetRGBStrokeColor(ctx, 0, 0, 0, 1);
CGContextSetLineWidth(ctx, [[value valueForKey:@"thickness"] doubleValue]);
CGContextMoveToPoint(ctx, [[value valueForKey:@"beginDrawLocationX"] doubleValue],
                             [[value valueForKey:@"beginDrawLocationY"] doubleValue]);
CGContextAddLineToPoint(ctx, [[value valueForKey:@"endDrawLocationX"] doubleValue],
                                [[value valueForKey:@"endDrawLocationY"] doubleValue]);
CGContextStrokePath(ctx);

}

在上面,'thickness' 等于 1。我使用 doubleValue 而不是 floatValue 进行从 int 的转换,以防 float 将值混合为不完全为 1 的值 - 它不是。

【问题讨论】:

    标签: drawing quartz-graphics line


    【解决方案1】:

    我的错。我一发布这个,我就在 CGContext 参考指南中找到了答案。我所要做的就是添加以下行:

    CGContextSetShouldAnitalias(ctx, 0); 
    

    还有宾果游戏!一切安好……

    【讨论】:

    • +1 自我回答很好。您也可以“接受”您自己的答案,以将此问题标记为已回答。
    最近更新 更多