unit bmpread; {процедуры для работы с Bmp}
interface
type
artype = array[0..0]of byte;
arptr = ^artype;
bmFileHeader = record {заголовок файла}
Typf : word; {сигнатура «BM»}
Size : longint; {длина файла в байтах}
Res1 : word; {зарезервировано}
Res2 : word; {зарезервировано}
OfBm : longint;
{смещение изображения в байтах (1078)}
end;
bmInfoHeader = record {информационный заголовок}
Size : longint; {длина заголовка в байтах (40)}
Widt : longint; {ширина изображения (в точках)}
Heig : longint; {высота изображения (в точках)}
Plan : word; {число плоскостей (1)}
BitC : word; {глубина цвета (бит на точку) (8)}
Comp : longint; {тип компрессии (0 — нет)}
SizI : longint; {размер изображения в байтах}
XppM : longint; {горизонтальное разрешение}
{(точек на метр — обычно 0)}
YppM : longint; {вертикальное разрешение}
{(точек на метр — обычно 0)}
NCoL : longint; {число цветов}
{(если максимально допустимое — 0)}
NCoI : longint; число основных цветов
end;
bmHeader = record {полный заголовок файла}
f : bmFileHeader; {заголовок файла}
i : bmInfoHeader; {информационный заголовок}
p : array[0..255,0..3]of byte; {таблица палитры}
end;
bmhptr = ^bmHeader;
procedure ReadBMP(image:arptr; {массив с изображением}
xim,yim:word; {размеры}
pal:arptr; {палитра}
filename:string); {имя файла}
{чтение изображения из Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);
{чтение заголовка Bmp-файла}
implementation
$R-
{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr; xim,yim:word;
pal:arptr; filename:string);
var
h : bmHeader;
i : integer;
bmpfile : file;
s : longint;
begin
assign(bmpfile,filename);
reset(bmpfile,1);
blockread(bmpfile,h,sizeof(h)); {чтение заголовка}
for i := 0 to yim-1 do begin {построчное чтение}
blockread(bmpfile,image^[(yim-i-1)*xim],xim);
if (xim mod 4) <> 0 then
blockread(bmpfile,s,4 — (xim mod 4));
end;
close(bmpfile);
for i ^= 0 to 255 do begin {преобразование палитры}
pal^[i*3+2] := h.p[i,0] shr 2; {синий}
pal^[i*3+1] := h.p[i,1] shr 2; {зеленый}
pal^[i*3+0] := h.p[i,2] shr 2; {красный}
end;
end;
{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);
var
bmpfile:file;
begin
assign(bmpfile,filename);
reset(bmpfile,1);
blockread(bmpfile,header^,sizeof(header^));
close(bmpfile);
end;
end.