![]() |
Effizientere Umsetzung gesucht: Datei mit Header und JPG
Hallo SpriteFans,
meine folgende Klassenmethode soll den Record TCollectionInfo in eine Datei schreiben und danach ein JPG an die Datei anhängen. Das JPG wird zuvor aus einer TImage-Komponente geladen. Die funktioniert alles wunderbar, allerdings leider nur über einen Umweg: Wie mein unten stehender Quelltext illustriert, habe ich dies bisher nur über den Umweg einer temporären Datei hinbekommen. Ich würde mich über einen Lösungsansatz ohne temporäre Datei Sehr freuen. Habe das ganze auch über Streams versucht, aller – dings bisher ohne Erfolg. Besten Dank im Voraus DANNYBOY PS: Sorry, aber ich kommentiere immer in englisch. „DecryptBuffer(buffer);“ bitte nicht beachten.
Delphi-Quellcode:
unit SpriteFiler;
interface uses ExtCtrls, JPEG, Classes, SysUtils, Graphics; //... type TCollectionInfo = record matrixCellWidth : word; matrixCellHeight : word; lastSpriteNum : integer; end; TSpriteSaver = class public class function SaveSpriteCollection(Image : TImage; info : TCollectionInfo; Filename : String) : boolean; end; implementation const buffersize = 1024; type TBuffer = array[1..buffersize-1] of byte; class function TSpriteSaver.SaveSpriteCollection; const tempfile = 'temp.dat'; var j : TJPEGImage; fIn, fOut : TFileStream; buffer : TBuffer; transmitted : integer; begin result:= true; try j:= TJPEGImage.Create; // copy image to jpg and save it to tempfile on hard disk j.Assign(image.Picture.Graphic); j.SaveToFile(tempfile); // save decrypted TCollectionInfo to file move(info, Buffer, SizeOf(TCollectionInfo)); fOut:= TFileStream.Create(filename, fmCreate OR fmShareExclusive); DecryptBuffer(buffer); fOut.Write(buffer, SizeOf(TCollectionInfo)); // load jpg, encrypt it and append it to outputfile fIn:= TFileStream.Create(tempfile, fmOpenRead OR fmShareExclusive); repeat transmitted:= fIn.Read(buffer, SizeOf(Buffer)); DecryptBuffer(buffer); fOut.Write(buffer, transmitted); until transmitted = 0; fOut.Free; fIn.Free; // delete temporary file deletefile(tempfile); except result:= false; end; end; end. |
Re: Effizientere Umsetzung gesucht: Datei mit Header und JPG
Schon mal versucht j.saveToStream :wink:
|
Re: Effizientere Umsetzung gesucht: Datei mit Header und JPG
Zitat:
wüsste, wie ich die Nicht-JPG-Daten dort anhänge, das JPG hinten dran und dann das ganze Paket in eine Datei speichere. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz