Einzelnen Beitrag anzeigen

mandyGuK

Registriert seit: 10. Mär 2011
2 Beiträge
 
#1

TmxJsCollection.SaveToStream

  Alt 23. Sep 2011, 13:32
Hallo,
ich habe folgendes Problem:
Ich möchte eine TmxJsCollection mit Items vom Typen TCollectionItem von einem Client zum Host (mit Hilfe von TIdTCPServer/Client) als Stream übertragen.
Jedes Item besitzt als published property einen Filename (String) und einmal ImageData (aktuell als TBytes implementiert, habe aber auch schon verschiedene Streams versucht). Der Filename wird einfach zugewiessen und für die Imagedatas benutze ich LoadFromFile.
Delphi-Quellcode:
  TMyImage = class(TCollectionItem)
  private
    FFilename: String;
    FImageData: TBytes;
  public
    constructor Create(ACollection: TCollection); override;
    destructor Destroy; override;
    procedure Assign(ASource: TPersistent); override;
    procedure LoadFromFile(const AFileName: String);
    procedure SaveToFile(const AFileName: String);
  published
    property Filename: String read FFilename write FFilename;
    property ImageData: TBytes read FImageData;
  end;

procedure TMyImage.LoadFromFile(const AFileName: String);
var
  LFileStream: TFileStream;
begin
  LFileStream := TFileStream.Create(AFileName, fmOpenRead OR fmShareDenyWrite);
  try
    SetLength(FImageData, LFileStream.Size);
    LFileStream.Read(FImageData[0], Length(FImageData));
  finally
    LFileStream.Free;
  end;
end;
Bis zu dem Punkt wo ich die Collection als Stream speichern will funktioniert alles. Die Collectionitems haben die richtige Größe/Size und die Daten sehen auch gut aus. Nach dem SaveToStream Aufruf allerdings ist die Size des Streams viel zu klein (rund 110-115(als Binary)).
Delphi-Quellcode:
procedure TMyClient.Execute;
var
  LStream: TStream;
begin
  LStream := TStringStream.Create;
  try
    FCollection.Binary := True;
    FCollection.SaveToStream(LStream);
    FClient.Connect;
    FClient.IOHandler.Write(LStream, 0, False);
    FClient.Disconnect;
  finally
    LStream.Free;
  end;
end;
Wenn ich nur Strings o.Ä. in den Stream speichere funktioniert alles reibungslos, nur die Bilddaten verursachen die Probleme.
Was mache ich falsch? Wie kann ich die Imagedatas in einer Collection zum Host übertragen?

Danke für alle Antworten im Voraus.
  Mit Zitat antworten Zitat