А как же метод | Код | bmp->ScanLine[Line_Number]
| ?
Кроме всего, если тебе интересна структура файла, то вот:
| Цитата |
--------------------------------------------------------------------------------
Структура Bmp-файла Имя Длина Смещение Описание Заголовок файла (BitMapFileHeader) Type 2 0 Сигнатура "BM" Size 4 2 Размер файла Reserved 1 2 6 Зарезервировано Reserved 2 2 8 Зарезервировано OffsetBits 4 10 Смещение изображения от начала файла Информационный заголовок (BitMapInfoHeader) Size 4 14 Длина заголовка Width 4 18 Ширина изображения, точки Height 4 22 Высота изображения, точки Planes 2 26 Число плоскостей BitCount 2 28 Глубина цвета, бит на точку Compression 4 30 Тип компрессии (0 - несжатое изображение) SizeImage 4 34 Размер изображения, байт XpelsPerMeter 4 38 Горизонтальное разрешение, точки на метр YpelsPerMeter 4 42 Вертикальное разрешение, точки на метр ColorsUsed 4 46 Число используемых цветов (0 - максимально возможное для данной глубины цвета) ColorsImportant 4 50 Число основных цветов Таблица цветов (палитра) (ColorTable) ColorTable 1024 54 256 элементов по 4 байта Данные изображения (BitMap Array) Image Size 1078 Изображение, записанное по строкам слева направо и снизу вверх
--------------------------------------------------------------------------------
Листинг 1 unit bmpread; {процедуры для работы с Bmp} interface type artype = array[0..0]of byte; arptr = ^artype; bmFileHeader = record {заголовок файла} Typf : word; {сигнатура } 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;
{чтение изображения из Bmp-файла} procedure ReadBMP(image:arptr; {массив с изображением} xim,yim:word; {размеры} pal:arptr; {палитра} filename:string); {имя файла}
{чтение заголовка Bmp-файла} procedure ReadBMPheader(header:bmhptr;filename:string);
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.
| |