AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Großes Icon in Stream speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Großes Icon in Stream speichern

Ein Thema von patti · begonnen am 16. Feb 2010 · letzter Beitrag vom 18. Feb 2010
 
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#1

Großes Icon in Stream speichern

  Alt 16. Feb 2010, 16:28
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.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  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 05:07 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