Обводы
Строка — это набор выделенных пикселей на растровом дисплее (или набор точек на печатной странице), определенный двумя точками: начальной точкой и конечной точкой. Пиксель, расположенный в начальной точке, всегда включается в строку, а пиксель, расположенный в конечной точке, всегда исключается. (Такой вид линии иногда называется инклюзивно-эксклюзивной.)
Когда приложение вызывает одну из функций рисования строк, графический интерфейс устройства (GDI) или в некоторых случаях драйвер устройства, определяет, какие пиксели следует выделить. GDI — это библиотека динамической компоновки (DLL), которая обрабатывает вызовы графических функций из приложения и передает эти вызовы драйверу устройства. Драйвер устройства — это библиотека DLL, которая получает входные данные из GDI, преобразует входные данные в команды устройства и передает эти команды соответствующему устройству. GDI использует цифровой разностный анализатор (DDA) для определения набора пикселей, определяющих линию. DDA определяет набор пикселей, проверяя каждую точку линии и определяя эти пиксели на поверхности отображения (или точки на печатной странице), которые соответствуют точкам. На следующем рисунке показана строка, начальная точка, конечная точка и пиксели, выделенные с помощью простой DDA.
Самый простой и наиболее распространенный DDA является Bresenham, или добавочный, DDA. Измененная версия этого алгоритма рисует линии в Windows. Добавочная DDA отмечена своей простотой, но она также отмечается за ее неточность. Так как он округляется до ближайшего целого значения, иногда не удается представить исходную строку, запрошенную приложением. DDA, используемый GDI, не округляется до ближайшего целого числа. В результате этот новый DDA создает выходные данные, которые иногда гораздо ближе к исходной строке, запрошенной приложением.
Заметка
Если приложению требуются выходные данные строки, которые невозможно достичь с помощью новой DDA, он может нарисовать собственные строки, вызвав функцию LineDDA и предоставив частную DDA (LineDDAProc). Однако функция LineDDA выполняет рисование линий гораздо медленнее, чем функции рисования строк. Не используйте эту функцию в приложении, если скорость является основной проблемой.
Приложение может использовать новую DDA для рисования отдельных строк и нескольких сегментов подключенных линий. Приложение может нарисовать одну строку, вызвав функцию LineTo. Эта функция рисует линию от текущей позиции до, но не включая указанную конечную точку. Приложение может нарисовать ряд сегментов подключенной линии, вызвав функцию Polyline, указав массив точек, указывающих конечную точку каждого сегмента строки. Приложение может рисование нескольких несвязанных сегментов подключенных линий путем вызова функции PolyPolyline, предоставляя необходимые конечные точки.
На следующем рисунке показаны выходные данные строки, созданные путем вызова функцийLineTo, Polylineи Функций PolyPoly line.