Archived
1
0
This repository has been archived on 2025-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
pascal/990915.PAS
2001-11-30 12:14:44 +01:00

115 lines
2.5 KiB
Plaintext

uses Graph, Crt, BGIP;
const input='face.bmp'; { Bitmap x*y*16 }
firstblock=118;
blocksize=4095;
var Orig: array[0..blocksize] of byte;
pos: integer;
first4: boolean;
wi,he: longint;
f: file;
result: word;
xmax,ymax: integer;
procedure OpenFile;
begin
Assign(f,input);
Reset(f,1);
BlockRead(f,Orig,SizeOf(Orig),result);
if (result<>SizeOf(Orig)) AND (result<>FileSize(f) MOD blocksize) then begin
TextColor(12);
WriteLn('FEHLER!!');
TextColor(15);
WriteLn('Es wurden nur ',result,' Bytes gelesen, statt ',SizeOf(Orig),'.');
Halt;
end;
wi := Orig[19]*256 + Orig[18];
he := Orig[23]*256 + Orig[22];
WriteLn('Image size: ',wi,'x',he,' (',(wi*he) DIV 2,' Bytes image data)');
WriteLn(FileSize(f),' Bytes filesize');
ReadKey;
pos := firstblock;
first4 := true;
end;
procedure GraphInit;
var grDriver, grMode : integer;
begin
grDriver := VGA;
{ VGAlo 640x200x16
VGAmed 640x350x16
VGAhi 640x480x16 }
grMode := VGAhi;
InitGraph(grDriver,grMode,BGIPath);
xmax := GetMaxX+1; { Bildschirmbreite in Pixeln }
ymax := GetMaxY+1; { Bildschirmh”he in Pixeln }
end;
function BMP2CRT(x: byte): byte;
begin
case x of
0: BMP2CRT:=0;
1: BMP2CRT:=4;
2: BMP2CRT:=2;
3: BMP2CRT:=6;
4: BMP2CRT:=1;
5: BMP2CRT:=5;
6: BMP2CRT:=3;
7: BMP2CRT:=8;
8: BMP2CRT:=7;
9: BMP2CRT:=12;
10: BMP2CRT:=10;
11: BMP2CRT:=14;
12: BMP2CRT:=9;
13: BMP2CRT:=13;
14: BMP2CRT:=11;
15: BMP2CRT:=15;
else
BMP2CRT:=x;
end;
end;
function GetNextPixCol: byte;
begin
if (first4) then begin
GetNextPixCol := Orig[pos] DIV 16;
first4 := false;
end else begin
GetNextPixCol := Orig[pos] MOD 16;
first4 := true;
Inc(pos);
end;
if (pos>blocksize) then begin
BlockRead(f,Orig,SizeOf(Orig),result);
if (result<>SizeOf(Orig)) AND (result<>FileSize(f) MOD (blocksize+1)) AND (result<>0) then begin
CloseGraph;
TextMode(co80);
TextColor(12);
WriteLn('FEHLER!!');
TextColor(15);
WriteLn('Es wurden nur ',result,' Bytes gelesen, statt ',SizeOf(Orig),'.');
Halt;
end;
pos := 0;
end;
end;
procedure ShowGraph;
var i,j: integer;
begin
for j:=he downto 1 do
for i:=1 to wi+6 do begin
{ WriteLn(i,'x',j,'- ',GetNextPixCol); }
PutPixel(i,j,BMP2CRT(GetNextPixCol));
end;
end;
begin
OpenFile;
Graphinit;
ShowGraph;
ReadKey;
end.