www.pudn.com > object pascal±àÒëÆ÷Ô´Âë.rar > bmp.pas
unit bmp;
interface
type
bitmapfileheader=packed record
bftype:array [1..2] of char;
bfsize:integer;
res1:array[0..3] of char;
bfoffbits:integer;
end;
TBitmapInfoHeader = record
biSize: integer;
biWidth: integer;
biHeight: integer;
biPlanes: Word;
biBitCount: Word;
biCompression: integer;
biSizeImage: integer;
biXPelsPerMeter: integer;
biYPelsPerMeter: integer;
biClrUsed: integer;
biClrImportant: integer;
end;
TRGBQuad = record
rgbBlue: Byte;
rgbGreen: Byte;
rgbRed: Byte;
rgbReserved: Byte;
end;
TBitmapInfo = record
bmiHeader: TBitmapInfoHeader;
{bmiColors: array[0..255] of TRGBQuad;}
end;
bmpfile=packed record
fileheader: bitmapfileheader;
filedata:tbitmapinfo;
end;
pbmpfile=^bmpfile;
image(minplane,maxplane,minrow,maxrow,mincol,maxcol:integer)=array[minplane..maxplane,minrow..maxrow,mincol..maxcol]of byte;
pimage=^image;
implementation
type
imageline(mincol,maxcol,minplane,maxplane:integer)=array[mincol..maxcol,minplane..maxplane] of byte;
procedure initbmpheader(var header:bmpfile;var im:image);
begin
end;
procedure storebmpfile(s:string;var im:image) ;
type line=array[0..4000,0..2] of byte;
var f:file; fsize,i,index,j,k,m,row,res:integer; pf:pbmpfile; la: ^imageline;b:byte;
begin
new (pf);
initbmpheader(pf^,im);
assign(f,s);
rewrite(f);
blockwrite(f,pf^,sizeof(bmpfile),res);
with pf^.filedata.bmiheader do begin new(la ,0,biwidth-1,0,2 );
for i:= biheight-1 downto 0 do begin
for k:=0 to biwidth-1 do
for m:=0 to 2 do begin
b:=im[m,i,k];
la^[k,m]:=b;
end;
blockwrite(f,la^[0,0],3*biwidth,res);
end ;
dispose(la);
close(f);
end;
dispose(pf);
end;
function loadbmpfile(s:string;var im:pimage):boolean ;
var f:file; fsize,i,index,j,k,m,row,res:integer;
la: ^imageline; pf:pbmpfile;
begin
assign(f,s);
{$i-}
reset(f);
if ioresult <>0 then begin loadbmpfile:=false; end
else begin
fsize:=filesize(f);
new(pf);
i:=sizeof(bmpfile);
blockread(f,pf^,i,res);
with pf^.filedata.bmiheader do begin
new(im,0,2,0,biheight-1,0,biwidth-1);
new(la,0,biwidth-1,0,2);
if bibitcount=8 then loadbmpfile:=false
else if bibitcount=24 then begin
for i:=0 to biheight-1 do begin
if i