Рисование с использованием реальных пикселей на дисплее Retina

Что мне нужно сделать, чтобы нарисовать некоторые фигуры на дисплее сетчатки, определяя фактические пиксели экрана. Я имею в виду, что мне нужно, чтобы все линии были шириной в 1 пиксель и никакого сглаживания. И, если я напишу код:

CGContextMoveToPoint(context,0,0);
CGContextAddLineToPoint(context,0,959);

затем на дисплее будет линия от самого верхнего левого пикселя до самого нижнего левого пикселя, включая его.

Если я правильно понял, мне нужно использовать CGContextScaleCTM. Но не всегда есть одна и та же закономерность в координатах. Иногда есть смещение по оси Y, а иногда нет. Я пытался написать какой-нибудь макрос для конвертации координат, но совсем запутался. Я знаю, что есть логические точки и автопозиционирование. Но в том-то и дело, что мне нужно рисовать все пиксели вручную, потому что я разрабатываю какую-то утилиту.


person Nikita    schedule 17.11.2011    source источник


Ответы (1)


Попробуйте это вместо этого:

CGContextMoveToPoint(context, 0.5, 0);
CGContextAddLineToPoint(context, 0.5, 959);

Почему. Линия шириной 1,0 пикселя будет центрирована по заданным вами координатам. Итак, если вы начнете с (0, 0), половина строки будет в столбце от -1 до 0, а половина строки будет в столбце от 0 до 1. Целочисленные координаты дают вам углы пикселей. , что хорошо для таких вещей, как растровые изображения.

person Dietrich Epp    schedule 17.11.2011
comment
В некоторых функциях все еще есть проблема, например: CGContextAddRect(...) Я использую много разных функций CG и много циклов в своем приложении. Есть ли способ сопоставить пиксели, а не края пикселей? - person Nikita; 17.11.2011
comment
Код, который я привожу выше, сопоставляется с пикселями, а не с краями пикселей. - person Dietrich Epp; 17.11.2011