program loadbmp; { only 256 colors } uses dos,crt,graph; { the driver is include in "play256.zip" on my pascal-homepage } { http://quintus.universal.nl/users/dickmann/pascal.htm } var regs :registers; maxx,maxy,p,x,y :integer; f :file; header :record bm:array[0..1] of char; groottebestand :longint; reserve :longint; offset :longint; groottebeeldinfo :longint; end; beeldinfo :record breedte,hoogte :longint; vlakken,bitsperpixel :word; hor,ver :longint; aantalkleuren :longint; end; bytesperlijn,oudpos :longint; rgbi :array[1..256] of record bb,gg,rr,ii :byte;end; rgb :array[1..256] of record r,g,b :byte;end; lijn :array[1..1024] of byte; procedure load_bmp(xx,yy :integer;filenaam :string); procedure set256palette(var rgb_buffer); begin with regs do begin ax :=$1012; bx :=0; cx :=256; es :=seg(rgb_buffer); dx :=ofs(rgb_buffer); intr($10,regs); end; end; begin maxx :=getmaxx-1;maxy :=getmaxy-1; assign(f,filenaam+'.bmp'); {$I-} reset(f,1); {$I+} if ioresult =0 then begin blockread(f,header,sizeof(header)); fillchar(beeldinfo,sizeof(beeldinfo),0); blockread(f,beeldinfo,header.groottebeeldinfo -4); with beeldinfo,header do begin bytesperlijn :=breedte *bitsperpixel; if (bytesperlijn and 31) =0 then bytesperlijn :=bytesperlijn shr 3 else bytesperlijn :=succ(bytesperlijn shr 5)shl 2; if aantalkleuren =0 then aantalkleuren :=1 shl bitsperpixel; if bitsperpixel <>8 then exit; blockread(f,rgbi,4*aantalkleuren); for p :=1 to aantalkleuren do with rgb[p],rgbi[p] do begin r :=rr shr 2; g :=gg shr 2; b :=bb shr 2; end; set256palette(rgb); with header,beeldinfo do begin if hoogte <= maxy then oudpos :=offset else oudpos :=offset +bytesperlijn *(hoogte -maxy); if breedte < maxx then maxx :=breedte; if hoogte