| Move(scr_arr,scr_buf^,plen); { копирование ее в буфер }

| WriteBlk(file name+'. red');

| { запись буфера на диск }

| Port[$3CE]:=4; Port[$3CF]:=3; { плоскость яркости }

| Move(scr_arr,scr_buf^,plen); { копирование ее в буфер }

| WriteBlk(file_name+'.int'); { запись буфера на диск }

| FreeMem( scr_buf, plen ); { освобождение памяти }

| Port[$3CE]:=4; Port[$3CF]:=0; { восстановление портов }

| END;

{Процедура чтения файлов изображения и вывода их на экран. Параметр file_name - hmz файла без расширения. }

| PROCEDURE LoadBitPlanes( file_name : String );

| VAR scr_buf:Pointer ; { указатель на буфер данных }

| scr_arr:g_plan absolute $A000:$0; { память адаптера }

| plen,mx,my:LongInt; { размер плоскости }

| { Вложенная процедура чтения плоскости с диска }

| PROCEDURE ReadBlk( name : String );

| VAR image file : File;

| BEGIN Assign( image.file, name );

| Reset( image_file, plen );

| BlockRead( image_file, scr_buf^, 1 );

| Close( image_file )

| END;

| BEGIN

| mx:=GetMaxX+1;

| my:=GetMaxY+1; {размеры плоскости }

| plen := mx*my div 8; {получение длины буфера }

| GetMem( scr_buf, plen ); {память для буфера }

| ReadBlk( file_name+'.blu' ); {чтение с диска в буфер }

| Port[$3C4]:=2; Port[$3C5]:=1; {Буфер копируется }

| Move(scr_buf^,scr_arr,plen); {в плоскость Blue. }

| ReadBlk(file_name+'.grn' ); {чтение с диска в буфер }

Рис. 22.13 (продолжение)

- 525 -

| Port[$3C4]:=2;

| Port[$3C5]:=2;

| { Буфер копируется }

| Move(scr_buf^,scr_arr,plen);

| { в плоскость Green. }

| ReadBlk( file_name+'.red' );

| { чтение с диска в буфер }

| Port[$3C4]:=2;

| Port[$3C5]:=4;

| { Буфер копируется }

| Move(scr_buf^,scr_arr,plen );

| { в плоскость Red. }

| ReadBlk( file_name+'.int' );

| { чтение с диска в буфер }

| Port[$3C4]:=2; Port[$3C5]:=8; { Буфер копируется }

| Move(scr_buf^,scr_arr,plen ); { в плоскость яркости. }

| FreeMem( scr_buf, plen ); { освобождение памяти }

| Port[$3C4]:=2;Port[$3C5]:=15; { восстановление портов }

| END;

| BEGIN

| { Пример вызовов процедур }

| GrInit;

| SetFillStyle(1,15);

| Bar( 0, 0, GetMaxX, GetMaxY );

| SetFillStyle(2, 2);

| Bar(40, 40,GetMaxX-40, GetMaxY-40 );

| SetFillStyle(3,3);

| Bar(120,120, GetMaxX-120, GetMaxY-120);

| SetFillStyle(4,4);

| Bar(240,180, GetMaxX-240, GetMaxY-180);

| ReadLn;

| SaveBitPlanes( 'plane' );

| ClearDevice;

| ReadLn;

| LoadBitPlanes( 'plane' );

| ReadLn;

| CloseGraph

| END.

Рис. 22.13 (окончание)

Эти процедуры работают для всех режимов, кроме CGA (так как в нем другой способ хранения данных). Поэтому для него приведем отдельные процедуры (рис. 22.14).

| USES Graph;

| TYPE

| g_plan=Array [1..16384] of Byte; { массив двух блоков }

| {Процедура сохранения изображения всего экрана на диске }

| { для адаптеров, работающих в режиме CGA. }

| PROCEDURE SaveCGAScr(file_name:String); {полное имя файла }

| VAR

| image_file : File;

| scr_buf : Pointer; { ссылка на буфер }

| scr_addr:g_plan absolute $B800:0; { память адаптера }

Перейти на страницу:

Поиск

Похожие книги