Hi,
hab im Moment so meine Schwierigkeiten, ein
großes Icon (speziell geht es im Moment um die Auflösung 256x256) in einen Stream zu speichern und wieder daraus zu lesen. Bei kleineren Icons (getestet bis 48x48) funktioniert meine Methode einwandfrei, jedoch bei höheren Auflösungen scheint es wie gesagt Probleme zu geben.
Wenn ich mir ein großes Icon besorge und erstmal auf eine Canvas zeichne, dann scheint alles zu funktionieren. Das Icon wird richtig dargestellt und es gibt keine Probleme. Nur nach dem Speichern und Lesen kann ich das Icon nicht mehr verwenden, als Error bekomme ich ein EOutOfRessources bzw. "Falscher Parameter".
Hier mal Ausschnitte aus meinem Quelltext:
Delphi-Quellcode:
procedure WriteIconToStream(var AStream : TStream; AIcon : TIcon);
var ms : TMemoryStream;
var s : integer;
begin
//--
ms := TMemoryStream.Create;
//
try
ms.Seek(0,soFromBeginning);
AIcon.SaveToStream(ms);
s := ms.Size;
AStream.Write(s, SizeOf(s));
ms.SaveToStream(AStream);
finally
ms.Free;
end;
end;
procedure ReadIconFromStream(var AStream : TStream; var AIcon : TIcon);
var ms : TMemoryStream;
var s : integer;
begin
//--
AStream.Read(s, SizeOf(s));
//
ms := TMemoryStream.Create;
//
try
ms.Seek(0,soFromBeginning);
ms.CopyFrom(AStream, s);
ms.Seek(0,soFromBeginning);
AIcon.LoadFromStream(ms);
finally
ms.Free;
end;
end;
Hier treten dann Probleme auf:
Delphi-Quellcode:
var hIcon : TIcon;
var ms : TStream;
begin
//--
hIcon:= TIcon.Create;
//
try
// Icon besorgen... klappt einwandfrei
//
Self.Repaint;
//
ms := TMemoryStream.Create;
//
try
WriteIconToStream(ms,hIcon);
ms.Seek(0,soBeginning);
ReadIconFromStream(ms,hIcon);
//
self.Canvas.Draw(150, 150, hIcon); // <-- Nach der Fehlermeldung steht der Cursor in dieser Zeile
finally
ms.Free;
end;
finally
hIcon.Free;
end;
Habe außerdem herausgefunden, dass ich per Icon.LoadFromFile die gleiche Fehlermeldung bekomme, wenn die Icon-Datei nur das 256er Icon enthält.
Entweder stehe ich im Moment völlig auf dem Schlauch und das Problem ist total einfach lösbar - oder aber es handelt es sich um ein grundsätzliches Problem der Icon-Klasse oder so. Hoffe daher auf Hilfe von euch.
Danke schonmal.