HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail | |||
| |||
|
Turbo Pascal Documentation | ||
Функция: Выводит из буфера на экран двоичный образ за- данной области экрана. Описание: PutImage(х1, у1, х2, у2, : word; var бит_масс; дв_опер : word) Примечания: Точка с координатами (х,у) определяет верх- ний левый угол прямоугольной области экрана. Параметр "бит_масс" является нетипизованным параметром, который опре- деляет ширину и высоту области экрана. Параметр "дв_опер" определяет, какой двоичный оператор будет использоваться для вывода двоичного образа области на экран. Определены следующие константы: const NormalPut = 0; { MOV } XORPut = 1; { XOR } OrPut = 2; { OR } AndPut = 3; { AND } NotPut = 4; { NOT } Каждая константа соотвествует двоичной операции. Напри- мер, PutImage(x,y,BitMap,NormalPut) выводит на экран двоич- ный образ, сохраненный в массиве BitMap, начиная с точки (x,y). При этом для вывода каждого байта двоичного образа используется инструкция ассемблера МОV. Аналогично: PutImage(x,y,BitMap,XORPut) выводит на экран двоичный образ, сохраненный в массиве Bit- Map, начиная с точки (x,y). При этом для вывода каждого бай- та двоичного образа используется инструкция ассемблера ХОR. Этот метод часто используется для мультипликации и перемеще- ния изображения по экрану. PutImage(x,y,BitMap,NotPut) инвертирует биты в BitMap и выводит двоичных образ, сохра- ненный в BitMap, начиная с точки (x,y). При этом для каждого байта двоичного образа используется инстркция ассемблера MOV. Таким образом двоичных образ при выводе получает нега- тивное по отношению к исходному изображение. Заметим, что процедра PutImage никогда не выполняет от- сечение изображения на границах текущей области просмотра. Более того, за одним исключнием оно не отсекается также на границе всего экрана. В этом случае, если какая-либо часть изображения не помещается в поле экрана, оно вообще не выво- дится. В следующем примере первый образ экрана будет выве- ден, а средние три вызова PutImage не приведут к выводу изображения. program NoClip; uses Graph; var Driver, Mode : integer; p : pointer; begin Driver := Detect; InitGraph(Driver, Mode, ''); if GraphResult <> grOk then Halt(1); SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn); GetMem(p, ImageSize(0, 0, 0, 99, 49)); PieSlice(50, 25, 0, 360, 45); GetImage(0, 0, 99, 49, p^); { ширина = 100, высота = 50 } ClearDevice; PutImage(GetMaxX - 99, 0, p^, NormalPut); { x + высота > GetMaxX } PutImage(-1, 0, p^, NormalPut); { -1,0 не находится на экране } PutImage(0, -1, p^, NormalPut); { 0,-1 не находится на экране } PutImage(0, GetMaxY - 30, p^, NormalPut) { выведет 31 "строку" } Readln; CloseGraph; end. В последнем обращении к PutImage высота отсекается по нижнему краю экрана и часть изображения выводится. Это единственных случай, когда процедура PutImage отсекает выво- димое изображение. Аналогичная процедура имеется в версии 2.0 Турбо-Си. Ограничения: Должен использоваться графический режим. Прочее: См. также процедуры GetImage, ImageSize. Пример: uses Graph; var p : pointer; Size : word; begin Gd := Detect; InitGraph(Gd, Gm, ''); ig GraphResult <> grOk then Halt(1); Bar(0, 0, GetMaxX, GetMaxY); Size := ImageSize(10,20,30,40); GetMem(p, Size); { выделить память в динамически распре- деляемой области } GetImage(10,20,30,40,p^); { считать двоичный образ } PutImage(100,100,p^,NormalPut); { скопировать двоичный образ } Readln; CloseGraph; end. |
HOME |