HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
В этот день много лет назад...
29 марта. В 1998 году (26 лет назад) - Норвежцами спасен экипаж рыболовного судна "Кубанский рыбак" мурманской фирмы "Баренцфишкомпани".
 
 

Turbo Pascal Documentation

Процедура PutImage

Модуль Graph


     Функция: Выводит из буфера на экран двоичный образ  за-
данной области экрана.
     Описание:  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