AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Effizientere Umsetzung gesucht: Datei mit Header und JPG
Thema durchsuchen
Ansicht
Themen-Optionen

Effizientere Umsetzung gesucht: Datei mit Header und JPG

Ein Thema von Dannyboy · begonnen am 10. Aug 2004 · letzter Beitrag vom 12. Aug 2004
 
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#1

Effizientere Umsetzung gesucht: Datei mit Header und JPG

  Alt 10. Aug 2004, 14:45
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 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