// Mehrere Bitmaps von Arrays oder Records werden zusammen in eine Datei
// gespeichert.  Querverweis:
Die Bitmap-Größe ermitteln

// Getestet mit D4 unter WinME

// 1. Bitmaps in Arrays

var 
  bilder: array[0..2] of TBitmap; 
  tf: TFilestream; 
 
const datei = 'c:\TestBitmapArray.str'; 
 
// speichern 
procedure TForm1.Button2Click(Sender: TObject); 
var x: integer; 
begin 
  for x := 0 to 2 do bilder[x] := TBitmap.create; 
  bilder[0].loadfromfile('d:\bilder\corel033.bmp'); 
  bilder[1].loadfromfile('d:\bilder\corel043.bmp'); 
  bilder[2].loadfromfile('d:\bilder\corel044.bmp'); 
  tf := TFilestream.create(datei, fmcreate); 
  for x := 0 to 2 do begin 
    bilder[x].savetostream(tf); 
    bilder[x].free; 
  end; 
  tf.free; 
end; 
 
// laden 
procedure TForm1.Button3Click(Sender: TObject); 
var x: integer; 
begin 
  tf := TFilestream.create(datei, fmopenread); 
  for x := 0 to 2 do begin 
    bilder[x] := TBitmap.Create; 
    bilder[x].loadfromstream(tf); 
  end; 
  tf.free; 
// Bilder beispielsweise auf Form1 zeichnen 
  canvas.draw(0, 0, bilder[0]); 
  canvas.draw(bilder[0].width, 0, bilder[1]); 
  canvas.draw(0, bilder[0].height, bilder[2]); 
//------------------------------------------ 
  for x := 0 to 2 do bilder[x].free; 
end;



//----------------------------------------------------------

// 2. Bitmaps in Records

type 
  BmpRcd = record 
    x, y: integer; 
    name: string[64]; 
    Bild: TBitmap; 
  end; 
 
const 
  dateiname = 'c:\TestBitmapRecord.str'; 
 
var 
  RcdBilder: array[0..2] of BmpRcd; 
  tfs: TFilestream; 
 
procedure TForm1.FormCreate(Sender: TObject); 
var x: integer; 
begin 
  for x := 0 to 2 do RcdBilder[x].bild := TBitmap.create; 
  RcdBilder[0].bild.loadfromfile('d:\Bilder\corel033.bmp'); 
  RcdBilder[0].name := 'Bild_33/Test'; 
  RcdBilder[0].x := 0; 
  RcdBilder[0].y := 0; 
  RcdBilder[1].bild.loadfromfile('d:\Bilder\corel043.bmp'); 
  RcdBilder[1].name := 'Bild_43/zweiter Test'; 
  RcdBilder[1].x := RcdBilder[0].bild.width; 
  RcdBilder[1].y := 0; 
  RcdBilder[2].bild.loadfromfile('d:\Bilder\corel044.bmp'); 
  RcdBilder[2].name := 'Bild_44/letzter Versuch'; 
  RcdBilder[2].x := 0; 
  RcdBilder[2].y := RcdBilder[0].bild.height; 
end; 
 
procedure TForm1.FormDestroy(Sender: TObject); 
var x: integer; 
begin 
  for x := 0 to 2 do RcdBilder[x].bild.free; 
end; 
 
// speichern 
procedure TForm1.Button5Click(Sender: TObject); 
var x: integer; 
begin 
  tfs := TFilestream.create(dateiname, fmcreate); 
  for x := 0 to 2 do begin 
    RcdBilder[x].bild.savetostream(tfs); 
    tfs.writebuffer(RcdBilder[x].name, sizeof(RcdBilder[x].name)); 
    tfs.writebuffer(RcdBilder[x].x, sizeof(RcdBilder[x].x)); 
    tfs.writebuffer(RcdBilder[x].y, sizeof(RcdBilder[x].y)); 
  end; 
  tfs.free; 
end; 
 
// laden 
procedure TForm1.Button6Click(Sender: TObject); 
var x: integer; 
begin 
  tfs := TFilestream.create(dateiname, fmopenread); 
  for x := 0 to 2 do begin 
    RcdBilder[x].bild.loadfromstream(tfs); 
    tfs.readbuffer(RcdBilder[x].name, sizeof(RcdBilder[x].name)); 
    tfs.readbuffer(RcdBilder[x].x, sizeof(RcdBilder[x].x)); 
    tfs.readbuffer(RcdBilder[x].y, sizeof(RcdBilder[x].y)); 
  end; 
  tfs.free; 
// --- Bilder beispielsweise auf Form1 zeichnen --- 
  canvas.brush.style := bsclear; 
  canvas.font.color := clyellow; 
  for x := 0 to 2 do begin 
    canvas.draw(RcdBilder[x].x, RcdBilder[x].y, RcdBilder[x].bild); 
    canvas.textout(RcdBilder[x].x, RcdBilder[x].y, RcdBilder[x].name); 
  end; 
//-------------------------------------------------- 
end;



Zugriffe seit 6.9.2001 auf Delphi-Ecke