![]() // 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