Пример записи информации в битмап
Материал из DRKB
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
fsBmp, fsFile: TStream;
begin
fsBmp := TFileStream.Create(FileName + '.bmp', fmCreate);
fsFile:= 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;
// запись заголовка
fsBmp.Write(bf, SizeOf(BITMAPFILEHEADER));
fsBmp.Write(bi, SizeOf(BITMAPINFOHEADER));
// запись точек (кол-во байтов = bi.biSizeImage)
fsBmp.CopyFrom(fsFile, bi.biSizeImage);
fsBmp.Free;
fsFile.Free;
end;
Author: Аэтерос
Source: http://forum.sources.ru
ID: 03776