
РАСТРОВЫЕ АЛГОРИТМЫ
86
РАСТРОВЫЕ АЛГОРИТМЫ
Так как в подавляющем большинстве графические устройства являются растровыми, то
есть представляют изображение в виде прямоугольной матрицы (сетки, целочисленной
решетки) пикселов (растра), то, естественно, возникает необходимость в растровых алгоритмах.
Хотя большинство графических библиотек содержат внутри себя достаточное количество
простейших растровых алгоритмов, таких, как:
• переведение идеального объекта (отрезка, окружности и др.) в их растровые образы;
• обработка растровых изображений,
тем не менее часто возникает необходимость явного построения растровых алгоритмов.
Достаточно важным понятием для растровой сетки является связность возможность
соединения двух пикселов растровой линией, то есть последовательным набором пикселов.
При этом возникает вопрос, когда пикселы (x
1
,y
1
)и (x
2
,y
2
) можно считать соседними.
Вводится два понятия связности:
1
2121
≤−+− yyxx ,
8связность, когда пикселы считаются соседними, если их x и yкоординаты отличаются
не более чем на единицу, то есть
4связность, когда пикселы считаются соседними, если либо их xкоординаты, либо y
координаты отличаются на единицу, то есть
1
21
≤− xx , 1
21
≤− yy .
Понятие 4связности является более сильным, чем 8связность: любые
два 4связных пиксела являются и 8связными, но не наоборот (рис. 1).
В качестве линии на растровой сетке выступает набор пикселов P
1
,
P
2
,..., P
n
, где любые два пиксела P
i;
P
i+1
являются соседними.
Замечание
Так как понятие линии базируется на понятии связности, то естественным образом
возникает понятие 4? и 8?связных линий. Поэтому когда мы говорим о растровом представлении,
например, отрезка, то следует ясно понимать, о каком именно представлении идет речь. При этом
нужно иметь в виду, что растровое представление объекта не является единственным и возможны
различные способы построения.
Растровое представление отрезка. Алгоритм Брезенхейма
Рассмотрим задачу построения растрового изображения отрезка, соединяющего точки
(x
1
,y
1
)и (x
2
,y
2
). Для простоты будем считать, что 0 =< y
2
y
1
=< x
2
x
1
. Тогда отрезок
описывается следующим уравнением:
[]
211
12
12
1
,),( xxxxx
xx
yy
yy ∈−
−
−
+=
или
y = kx + b .
Простейший алгоритм растрового представления отрезка имеет
вид:
! // File Line1.cpp
void Line ( int x1, int y1, int x2, int y2, int color )
{
double k = ((double)(y2yl))/(x2xl):
double b = y1 k*x1;
for ( int x = x1; x <= x2; x++ )
putpixel ( x, round ( k*x + b ), color );
}