{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+} {$M 16384,0,655360} program read_bmps; uses graph; type bmFileHeader=record sig:word; filesize:longint; reserved:longint; offsimg:longint; end; bm256InfoHeader=record IHsize:longint; imgWidth:longint; imgHeight:longint; planes:word; bitCount:word; compression:longint; imgSize:longint; Xppm:longint; Yppm:longint; UsedColors:longint; ImportantColors:longint; end; TPallet=array[0..255,0..3]of byte; TImg=array[0..0]of byte; PImg=^TImg; bm256File=record bmFH:bmFileHeader; bm256IH:bm256InfoHeader; pallet:TPallet; img:PImg; end; var bmp:bm256File; gd,gm:integer; procedure readBMP(const fname:string;var bmp:bm256File); var bmf:file; i,j:longint; begin assign(bmf,fname); reset(bmf,1); blockread(bmf,bmp.bmFH,sizeof(bmp.bmFH)); blockread(bmf,bmp.bm256IH,sizeof(bmp.bm256IH)); blockread(bmf,bmp.pallet,sizeof(bmp.pallet)); getmem(bmp.img,bmp.bm256IH.imgSize); for i:=0 to bmp.bm256IH.imgHeight-1 do begin {$R-}blockread(bmf,bmp.img^[(bmp.bm256IH.imgHeight-i-1)*bmp.bm256IH.imgWidth],bmp.bm256IH.imgWidth);{$R+} if bmp.bm256IH.imgWidth mod 4<>0 then blockread(bmf,j,4-bmp.bm256IH.imgWidth mod 4); end; end; procedure writeBMP(const fname:string;bmp:bm256File); var bmf:file; i,j:longint; begin assign(bmf,fname); rewrite(bmf,1); blockwrite(bmf,bmp.bmFH,sizeof(bmp.bmFH)); blockwrite(bmf,bmp.bm256IH,sizeof(bmp.bm256IH)); blockwrite(bmf,bmp.pallet,sizeof(bmp.pallet)); for i:=0 to bmp.bm256IH.imgHeight-1 do begin {$R-}blockwrite(bmf,bmp.img^[(bmp.bm256IH.imgHeight-i-1)*bmp.bm256IH.imgWidth],bmp.bm256IH.imgWidth);{$R+} if bmp.bm256IH.imgWidth mod 4<>0 then blockwrite(bmf,j,4-bmp.bm256IH.imgWidth mod 4); end; end; procedure setpal(const pallet:TPallet); var i:integer; begin for i:=0 to 255 do setrgbpalette(i,pallet[i,2] shr 2,pallet[i,1] shr 2,pallet[i,0] shr 2); end; procedure outBMP(const bmp:bm256File); var i,j:longint; begin for i:=0 to bmp.bm256IH.imgHeight-1 do for j:=0 to bmp.bm256IH.imgWidth-1 do {$R-}putpixel(j+70,i+70,bmp.img^[i*bmp.bm256IH.imgWidth+j]);{$R+} end; begin gd:=installuserdriver('svga256',nil); gm:=2; initgraph(gd,gm,''); readBMP('kurs1.bmp',bmp); { writeBMP('kurs1.bmp',bmp);} setpal(bmp.pallet); outBMP(bmp); readln; end.