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.