Пример записи информации в битмап

Пример записи информации в битмап

type
 BITMAPFILEHEADER = packed record
  bfType:WORD; //Сигнатура BM
  bfSize:DWORD; //Размер файла
  bfReserved1:WORD; //Зарезервировано, всегда 0
  bfReserved2:WORD; //Тот же случай
  bfOffBits:DWORD; //Смещение(в байтах) от заголовка(его размер)
 end;
 BITMAPINFOHEADER = packed record
  biSize:DWORD; //Число байтов, необходимых этой структуре
  biWidth:LONGWORD; //Ширина
  biHeight:LONGWORD; //Высота
  biPlanes:WORD; //Число плоскостей устройства. =1
  biBitCount:WORD; //Число битов на пиксел. В примере =24
  biCompression:DWORD; //Тип сжатия. В примере =0(т.е. нет)
  biSizeImage:DWORD; //Размер изобр. 0, если нет сжатия
  biXPelsPerMeter:LONGWORD; //Горизонтальное разрешение (пиксел/м)
  biYPelsPerMeter:LONGWORD; //Вертикальное разрешение (пиксел/м)
  biClrUsed:DWORD; //Используемые цвета. 0 - исп. все
  biClrImportant:DWORD; //Важные цвета. 0 - все важны
 end;
//Если хотите знать больше, смотрите SDK->Поиск->BMP->Bitmap Storage
implementation
{$R *.dfm}
procedure FileToBMP(FileName:String;w,h:Integer);
var
bmp,aFile:TStream;
begin
 bmp:=TFileStream.Create(FileName+'.bmp',fmCreate);
 aFile:=TFileStream.Create(FileName,fmOpenRead);
 bf.bfType:=$4D42; //= BM
 bf.bfReserved1:=0;
 bf.bfReserved2:=0;
 bf.bfOffBits:=SizeOf(BITMAPFILEHEADER)+SizeOf(BITMAPINFOHEADER);
 bi.biSize:=SizeOf(BITMAPINFOHEADER);
 bi.biWidth:=w;
 bi.biHeight:=h;
 bi.biPlanes:=1;
 bi.biBitCount:=24;
 bi.biCompression:=0;
 bi.biSizeImage:=w*h*3;//24бита = 3байта
 //остальное в этом примере = 0
 bi.biXPelsPerMeter:=0;
 bi.biYPelsPerMeter:=0;
 bi.biClrUsed:=0;
 bi.biClrImportant:=0;
 bf.bfSize:=bf.bfOffBits+bi.biSizeImage;
 //запись заголовка
 bmp.Write(bf,SizeOf(BITMAPFILEHEADER));
 bmp.Write(bi,SizeOf(BITMAPINFOHEADER));
 //запись точек(кол-во байтов = bi.biSizeImage)
 bmp.CopyFrom(aFile,bi.biSizeImage);
 bmp.Free;
 aFile.Free;
end;
Автор: Аэтерос

Взято из http://forum.sources.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...