Die Funktionalität will ich deiner Umsetzung gar nicht absprechen, sie ist nur unschön.
- WideString
kann auch Unicode und ist somit in der Lage wirklich alle Dateinamen zu transportieren
- IStream ist ein Stream-Interface von Microsoft und hat nichts mit FMX oder VCL zu tun. Das Interface ist in Winapi.ActiveX zu finden und mit einem System.Classes.TStreamAdapter kannst du dir so einen IStream
von einem normalen TStream
holen.
Der ganze Aufruf sieht dann mit einem
IStream
so aus (die Rückgabe erfolgt im gleichen Stream
):
Delphi-Quellcode:
function ProcessBitmap( ABitmap : TBitmap ):Boolean
var
LStream : TStream;
begin
LStream := TMemoryStream.Create;
try
ABitmap.SaveToStream( LStream );
if ShowBitmapFromStream( TStreamAdapter.Create( LStream, soReference ) ) then
begin
LStream.Seek( 0, soFromBeginning );
ABitmap.LoadFromStream( LStream );
end;
finally
LStream.Free;
end;
end;
BTW:
Ich habe gerade die Vorlage für deinen Code entdeckt
http://blogs.embarcadero.com/stephen...l-application/
Nun ja, die Beispiele sind von denen halt auch nicht so der Brüller.
Und den Grund für die Rückgabe als Datei habe ich auch entdeckt (ein echter Schenkelklopfer):
FMX.Graphics.TBitmap.LoadFromStream analysiert den Stream und erkennt das Grafikformat - sehr löblich.
FMX.Graphics.TBitmap.SaveToStream speichert das Bild stumpf als PNG in den Stream
FMX.Graphics.TBitmap.SaveToFile speichert das Bild in dem Format ab, was von der Dateiendung erkannt wird.
Schaut man sich den Code von
TBitmap.SaveToStream
an, dann sieht man aber auch sofort, wie man das abändern kann