Читайте также:
|
|
void H_Line (int х1, int x2, int y, unsigned int color)
{
// функция рисует горизонтальную линию, используя memset()
// x2 должно быть больше х1
_fmemset ((char far *) (video_buffer + ((у << 8) + (у <<6)) + х1), color, x2 - х1 + 1);
} // конец функции
Следует кое-что запомнить:
§ Мы используем функцию _fmemset, поскольку она, в отличие от memset, корректно работает с дальними (FAR) указателями;
§ Мы вычисляем начальный адрес линии, и функция заполняет определенное количество байтов заданным значением цвета;
§ Количество байтов равно длине строки, которую мы вычисляем как разность между правым и левым концами линии. При этом нужно прибавить единицу, чтобы не потерять последнюю точку.
К сожалению, мы не можем использовать семейство функций memset для рисования вертикальных линий, поскольку они работают только с непрерывными областями памяти. В случае вертикальных линий каждый следующий пиксель отстоит на 320 байт от предыдущего. Если вы находитесь в какой-то точке и хотите рисовать линию вниз, то вам надо прибавлять 320, а если линия рисует вверх, то надо вычитать 320 из текущего адреса. Таким образом, мы можем создать цикл, который увеличивает адрес на 320 и рисует вертикальную линию в виде пикселей сверху вниз. Листинг 5.7 демонстрирует код этой функции.
Дата добавления: 2015-07-12; просмотров: 149 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Листинг 5.5. Программа быстрого рисования точки. | | | Листинг 5.7. Рисование вертикальной линии. |