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


 
В этот день много лет назад...
26 апреля. В 1968 году (56 лет назад) - Вертолетом Сикорский Сн-53а в рамках программы разработки единой системы электронного авиационного оборудования, предназначенного для этих летательных аппаратов, выполняется первый бреющий полет вертолета на автопилоте по наземным ориентирам.
 
 

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