home *** CD-ROM | disk | FTP | other *** search
- UNIT PCXUNIT;
-
- {Diese Unit stellt eine Moeglichkeit dar, EGA-Hires Bilder
- zu laden und darzustellen. Sie kann jederzeit um weitere,
- nicht vorhandene Laderoutine für Bilder eines anderen
- Formates als des hier verwendeten PC-Paintbrush-Formates
- erweitert werden.}
-
- INTERFACE
- USES Crt, Graph, Dos;
-
- VAR
- p : Pointer;
- f : FILE OF Byte;
- nx : Char;
- n : String;
- fin,ny : Boolean;
- a,co,k,x,y,c,r,l,d : Integer;
- b,xx1,yy1,xx,yy : Integer;
- bx1,bx2,by1,by2 : Byte;
- s : Byte;
- Color : ARRAY[0..640,0..4] OF Boolean;
-
- PROCEDURE LOADPIC;
-
- IMPLEMENTATION
-
-
- PROCEDURE LOADPIC;
-
- {Prozedur zum Laden von PC-Paintbrush-Bildern}
- {--------------------------------------------}
-
- BEGIN;
- Assign(f,n); {Dateiname "n" wird vom Hauptprogramm}
- Reset(f); {uebergeben }
- FOR a:=1 TO 4 DO {Die ersten 4 Byte ueberspringen}
- Read(f,s);
- Read(f,bx1);
- Read(f,bx2);
- Read(f,by1);
- Read(f,by2);
- xx1:=bx1+bx2*256;
- yy1:=by1+by2*256;
- Read(f,bx1);
- Read(f,bx2);
- Read(f,by1);
- Read(f,by2);
- xx:=(bx1+(bx2*256))-xx1; {Berechnung der Groesse des}
- yy:=(by1+(by2*256))-yy1; {Bildes}
- Reset(f);
- FOR a:=1 TO 128 DO {Die ersten 128 Byte ueberspringen}
- Read(f,s);
- fin:=EoF(f);
- ClearDevice;
- co:=Blue;
- FOR k:=0 TO xx DO BEGIN;
- FOR l:=1 TO 4 DO Color[k,l]:=FALSE;
- END;
- x:=0; y:=0; c:=1; r:=0;
- REPEAT;
- d:=1;
- Read(f,s);
- fin:=EoF(f);
- IF (s AND 192)=192 THEN BEGIN;
- { Zaehler vorhanden }
- d:=(s XOR 192);
- Read(f,s);
- fin:=EoF(f);
- END;
- FOR b:=1 TO d DO BEGIN;
- IF (s AND 128)=0 THEN Color[x,co]:=TRUE;
- IF (s AND 64)=0 THEN Color[x+1,co]:=TRUE;
- IF (s AND 32)=0 THEN Color[x+2,co]:=TRUE;
- IF (s AND 16)=0 THEN Color[x+3,co]:=TRUE;
- IF (s AND 8)=0 THEN Color[x+4,co]:=TRUE;
- IF (s AND 4)=0 THEN Color[x+5,co]:=TRUE;
- IF (s AND 2)=0 THEN Color[x+6,co]:=TRUE;
- IF (s AND 1)=0 THEN Color[x+7,co]:=TRUE;
- x:=x+8;
- IF x>=(xx) THEN BEGIN;
- x:=0;
- c:=c+1;
- IF c>4 THEN BEGIN; {CGA: IF C>2 ...}
- c:=1;
- FOR k:=0 TO xx DO BEGIN;
- co:=15;
-
- {Die folgenden Abfragen bestimmen die Farben. Sie
- koennen selbstverstaendlich nach eigenen Wuenschen
- abgeaendert werden}
-
- IF (Color[k,1]=TRUE) AND (Color[k,2]=TRUE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=TRUE) THEN co:=0;
- IF (Color[k,1]=FALSE) AND (Color[k,2]=TRUE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=TRUE) THEN co:=1;
- IF (Color[k,1]=FALSE) AND (Color[k,2]=TRUE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=FALSE) THEN co:=9;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=FALSE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=TRUE) THEN co:=2;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=FALSE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=FALSE) THEN co:=10;
- IF (Color[k,1]=FALSE) AND (Color[k,2]=FALSE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=TRUE) THEN co:=3;
- IF (Color[k,1]=FALSE) AND (Color[k,2]=FALSE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=FALSE) THEN co:=11;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=TRUE) AND (Color[k,3]=FALSE) AND
- (Color[k,4]=TRUE) THEN co:=4;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=TRUE) AND (Color[k,3]=FALSE) AND
- (Color[k,4]=FALSE) THEN co:=12;
- {if (color[k,1]=false) and (color[k,2]=true) and (color[k,3]=true) and
- (color[k,4]=true) then co:=5; }
- IF (Color[k,1]=FALSE) AND (Color[k,2]=TRUE) AND (Color[k,3]=FALSE) AND
- (Color[k,4]=FALSE) THEN co:=13;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=FALSE) AND (Color[k,3]=FALSE) AND
- (Color[k,4]=TRUE) THEN co:=6;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=FALSE) AND (Color[k,3]=FALSE) AND
- (Color[k,4]=FALSE) THEN co:=14;
- IF (Color[k,1]=FALSE) AND (Color[k,2]=FALSE) AND (Color[k,3]=FALSE) AND
- (Color[k,4]=TRUE) THEN co:=7;
- IF (Color[k,1]=TRUE) AND (Color[k,2]=TRUE) AND (Color[k,3]=TRUE) AND
- (Color[k,4]=FALSE) THEN co:=8;
- PutPixel(k,y,co);
- END; (* for k *)
- y:=y+1;
- FOR k:=0 TO xx DO BEGIN;
- FOR l:=1 TO 4 DO Color[k,l]:=FALSE;
- END; (* for k *)
- END; (* if c>4 *)
- END; (* if x>=(xx) *)
- IF c=1 THEN co:=1;
- IF c=2 THEN co:=2;
- IF c=3 THEN co:=3;
- IF c=4 THEN co:=4;
- END; (* for b *)
- nx:=' ';
- IF KeyPressed=TRUE THEN BEGIN;
- nx:=ReadKey;
- IF nx=#59 THEN
- ny:=TRUE;
- END;
- UNTIL (fin=TRUE) OR (ny=TRUE);
- Close(f);
- END; (* proc LoadPic *)
-
- BEGIN; {Ende des Unit-Files}
- END. (* Unit PCXUNIT *)
-