Прочитать на английском

Поделиться через


Линии

Линия — это набор выделенных пикселей на растровом дисплее (или набор точек на печатной странице), определяемый двумя точками: начальной и конечной точкой. Пиксель, расположенный в начальной точке, всегда включается в линию, а пиксель, расположенный в конечной точке, всегда исключается. (Такой тип линии иногда называют инклюзивным.)

Когда приложение вызывает одну из функций рисования линий, интерфейс графического устройства (GDI) или в некоторых случаях драйвер устройства определяет, какие пиксели следует выделить. GDI — это библиотека динамической компоновки (DLL), которая обрабатывает вызовы графических функций из приложения и передает эти вызовы драйверу устройства. Драйвер устройства — это библиотека DLL, которая получает входные данные из GDI, преобразует входные данные в команды устройства и передает эти команды соответствующему устройству. GDI использует цифровой дифференциальный анализатор (DDA) для определения набора пикселей, определяющих линию. DDA определяет набор пикселей, проверяя каждую точку линии и определяя эти пиксели на поверхности дисплея (или точки на печатной странице), которые соответствуют точкам. На следующем рисунке показана линия, ее начальная точка, конечная точка и пиксели, выделенные с помощью простого DDA.

иллюстрация, показывающая сетку пикселей, начальную и конечную точки, линию и заливку пикселей, расположенных вдоль линии

Самый простой и распространенный DDA — это Брезенхэмская или добавочная DDA. Измененная версия этого алгоритма рисует линии в Windows. Добавочный DDA отличается своей простотой, но он также отмечается своей неточностью. Поскольку он округляется до ближайшего целочисленного значения, иногда он не представляет исходную строку, запрошенную приложением. DDA, используемый GDI, не округляется до ближайшего целого числа. В результате этот новый DDA создает выходные данные, которые иногда гораздо ближе по внешнему виду к исходной строке, запрошенной приложением.

Примечание

Если приложению требуются выходные данные строки, которые не могут быть достигнуты с помощью нового DDA, оно может нарисовать собственные линии, вызвав функцию LineDDA и предоставив частный DDA (LineDDAProc). Однако функция LineDDA рисует линии гораздо медленнее, чем функции рисования линий. Не используйте эту функцию в приложении, если скорость является основной проблемой.

 

Приложение может использовать новый DDA для рисования одной линии и нескольких сегментов линий. Приложение может нарисовать одну линию, вызвав функцию LineTo . Эта функция рисует линию от текущей позиции до указанной конечной точки, но не включает в себя. Приложение может нарисовать ряд сегментов соединенных линий, вызвав функцию Polyline , предоставляя массив точек, определяющих конечную точку каждого сегмента линии. Приложение может нарисовать несколько несвязанных рядов сегментов соединенных линий, вызвав функцию PolyPolyline , указав необходимые конечные точки.

На следующем рисунке показаны выходные данные строки, созданные путем вызова функций LineTo, Polyline и PolyPolyline .

Иллюстрация, показывающая прямую линию, прямоугольник в форме