Линия - это ряд выделенных пикселей на растровом дисплее (или ряд точек на напечатанной странице), идентифицированный двумя точками: начальной и конечной. Пиксел, расположенный в начальной точке всегда включается в линию, а пиксел, расположенный в конечной точке всегда исключается. (Этот вид линии иногда называют включающим-исключающим).
Когда приложение вызывает одну из функций рисования линий, то графический интерфейс устройства (GDI), или, в некоторых случаях, драйвер устройства, определяет, какие пиксели должны быть выделены. GDI - это библиотека динамической связи (DLL), которая обрабатывает вызовы графических функций из приложения и передает эти вызовы в драйвер устройства. Драйвер устройства - это DLL, которая получает ввод данных от GDI, преобразует вводимые данные в команды устройства и передает эти команды в соответствующее устройство. GDI использует цифровой дифференциальный анализатор (DDA), чтобы определить установку пикселей, которые определяют линию. DDA определяет установку пикселей, исследуя каждую точку на линии и идентифицируя эти пиксели на поверхности дисплея (или точки на напечатанной странице), которые соответствуют этим точкам. Следующая иллюстрация показывает линию, ее начальную точку, ее конечную точку и пиксели выделенные при помощи использования простой DDA.
Самый простой и наиболее общий цифровой дифференциальный анализатор - это Bresenham, или увеличивающий цифровой дифференциальный анализатор. Модифицированная версия его алгоритма рисований линий используется в Windows. Увеличивающий цифровой дифференциальный анализатор отмечается своей простотой, но он также выделяется и своей неточностью. Поскольку он округляет значение к самому близкому целому, то иногда не в состоянии представить исходную линию, как того требует приложение. Цифровой дифференциальный анализатор, используемый GDI не округляет значения до самого близкого целого числа. В результате, этот новый цифровой дифференциальный анализатор генерирует вывод данных, который иногда намного ближе по внешности к исходной линии, которую требует приложение.
Обратите внимание! на то, что, если приложение требует вывода линии, который не может быть достигнут новым цифровым дифференциальным анализатором, то оно может рисовать свои собственные линии, вызывая функцию LineDDA и предоставлять частный цифровой дифференциальный анализатор (LineDDAProc). Однако, рисование линий функцией LineDDA намного медленнее, чем другими рисующими линии функциями. Не используйте эту функцию в приложениях, где скорость имеет первостепенное значение. |
Приложение может использовать новый цифровой дифференциальный анализатор (DDA), чтобы рисовать одиночные линии и несколько связанных отрезков прямых. Приложение может рисовать единственную линию, вызывая функцию LineTo. Эта функция чертит линию от текущей позиции до указанной конечной точки, но не включая ее в состав линии. Приложение может рисовать ряд связанных отрезков прямых, вызывая функцию Polyline, снабжая массив точек, которые задают конечную точку каждого отрезка прямого. Приложение может рисовать многочисленный, несвязный ряд связанных отрезков прямых, вызывая функцию PolyPolyline, предоставляя ей требуемые конечные точки.
Следующая иллюстрация показывает вывод линии, созданный, вызовом функции LineTo, Polyline и PolyPolyline.