Практика программирования (Бейсик, Си, Паскаль)



         

Работа с отдельными точками и растровыми изображениями


Вывод отдельных точек (пикселов) в программе имеет смысл, когда количество таких точек сравнительно невелико (от нескольких десятков до 2—3 тысяч). Если мы попытаемся заполнить весь экран путем вывода каждой точки, то эта процедура займет достаточно много времени. Для изменения кода цвета пиксела достаточно указать его координаты (оконные или экранные) и задать новый цвет.

В QBasic для этой цели используется один из двух операторов PSET или PRESET:

PSET х,у [,c] . PRESET x,y [,с]

Третий параметр является необязательным, но если он задан, то определяет новый код цвета. Если в этих операторах цвет не задавать, то оператор PSET использует цвет переднего плана, PRESET — цвет фона. Таким образом, один из них рисует точку, а второй — стирает ее на экране. Если очень надо, то программа может узнать цвет пиксела с заданными координатами. В QBasic для этой цели используется функция P0INT:

c=P0INT(x,y)

Аналогичные возможности присутствуют и в библиотеке BGI:

ТС: putpixel(х,у,с);

ТР: PutPixei(x,у,с);

c=getpixel (х, у) ;

c:=-GetPixel (x, у) ;

Гораздо больший интерес представляют процедуры группового копирования кодов цвета пикселов, заполняющих прямоугольную область экрана и образующих растровое изображение. Так как операция копирования между байтами видеопамяти и оперативной памяти выполняется достаточно быстро, то таким способом можно мгновенно обновить содержимое экрана. Правда, целиком скопировать или обновить содержимое экрана нельзя по совершенно тривиальной причине. В таком обмене должен участвовать массив, а в наших системах программирования размер массива не может превышать 64 Кбайт. Тогда как для запоминания кодов цвета всех пикселов экрана потребуется не менее чем 640x480x4/8 = 153 600 байт. Поэтому для полного обновления содержимого экрана необходимо не менее трех обращений к соответствующей процедуре.

В системе QBasic групповой обмен с видеопамятью осуществляют операторы GET И PUT:

GET (xl,yl)-(x2,y2), А% PUT (хЗ,уЗ), А%, ovr

Координаты двух точек, как и всегда, определяют положение левого верхнего (xl.yl) и правого нижнего (х2,у2) углов копируемой, прямоугольной области экрана. Коды цветности пикселов, попадающих в этот участок, переписываются в массив А%, который должен иметь достаточный объем. В самых первых элементах массива А% запоминаются габариты сохраняемой области экрана — число строк и число столбцов, вслед за которыми в каждый байт массива А% поступают коды цветности двух смежных пикселов. Если оказывается, что число пикселов в строке нечетно, то прихватывается код цветности еще одного лишнего пиксела, чтобы сохранить байтовую структуру данных.




Содержание  Назад  Вперед