Как рисовать горизонтальные и вертикальные линии шириной в один пиксель в кварце? - PullRequest
2 голосов
/ 12 октября 2010

У меня проблемы с рисованием линий шириной в один пиксель. Все линии идеально горизонтальные или вертикальные (я не рисую диагональные линии), но они не рисуются чисто. Похоже, что он рисует через два пикселя в уменьшенном альфа. Без сомнения, из-за сглаживания. Я искал документы и форумы и наткнулся на заявление, в котором говорится, что «нет проблем с рисованием горизонтальных и вертикальных линий шириной в один пиксель ...», но я не знаю, как именно. Любые указатели приветствуются.

Код для рисования прост:

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);

}

В приведенном выше примере 'толщина' равна 1. Я использовал doubleValue вместо floatValue для преобразования из int в случае, если float преобразовывал значение в нечто не совсем 1 - это не так.

1 Ответ

3 голосов
/ 12 октября 2010

Мой плохой. Как только я опубликовал это, я нашел ответ в справочном руководстве CGContext. все, что мне нужно было сделать, это добавить строку:

CGContextSetShouldAnitalias(ctx, 0); 

и бинго! Все в мире ...

...