// Es werden
mehrere JPGs in einem Stream zusammengefasst und einzeln uses JPeg; var
Datei: string = 'C:\JPGs.str';
MS, hlp: TMemoryStream;
JP: TJpegImage;
procedure JPGStream(Bilder: array of string);
var
i, x: integer;
procedure schreibe(s: string);
begin
JP.loadfromfile(s);
JP.SaveToStream(hlp);
i := hlp.size;
hlp.position := 0;
MS.writebuffer(i, 4);
MS.copyfrom(hlp, i);
hlp.size := 0;
end;
begin
MS := TMemoryStream.create;
hlp := TMemoryStream.create;
JP := TJPegImage.create;
for x := 0 to high(Bilder) do
schreibe(Bilder[x]);
MS.SaveToFile(datei);
hlp.free;
MS.free;
end;
function HoleBild(welches: integer; JP: TJpegImage): boolean;
var
i, w: integer;
begin
result := false;
hlp := TMemoryStream.create;
try
MS.position := 0;
w := 0;
while MS.position < MS.Size do begin
MS.Readbuffer(i, 4);
if w = welches then begin
hlp.copyfrom(MS, i);
hlp.position := 0;
JP.loadfromstream(hlp);
result := true;
break;
end;
inc(w);
MS.Position := MS.Position + i;
end;
finally
hlp.free;
end;
end;
// --- Beispielaufrufe ---
// 3 JPGs in einem Stream zusammenfassen
procedure TForm1.Button1Click(Sender: TObject);
begin
JPGStream(['D:\BILDER\JPG\Bild1.jpg', 'D:\BILDER\JPG\Bild2.jpg',
'D:\BILDER\JPG\Bild3.jpg']);
end;
// JPGs in unterschiedlicher Reihenfolge holen
// und unterschiedlich lange anzeigen.
// (Die Zählung der Bilder beginnt bei "Null")
procedure TForm1.Button2Click(Sender: TObject);
const
folge: array[0..2] of integer = (2, 0, 1);
pause: array[0..2] of integer = (2000, 1111, 1600);
var
i: integer;
begin
if fileexists(Datei) then begin
MS := TMemoryStream.create;
JP := TJPegImage.create;
try
MS.loadfromfile(Datei);
for i := 0 to 2 do begin
if HoleBild(folge[i], JP) then begin
canvas.draw(0, 0, JP); // z.B.
sleep(pause[i]);
refresh;
end else begin
showmessage('Fehler bei Bild ' + inttostr(folge[i]));
break;
end;
end;
finally
JP.free;
MS.free;
end;
end else showmessage('Datei nicht gefunden');
end;
|
Zugriffe seit 6.9.2001 auf Delphi-Ecke





