Entwickler-Ecke

Internet / Netzwerk - BMP via Indy ohne zwischenspechern übertragen


maxk - So 29.09.02 16:02
Titel: BMP via Indy ohne zwischenspechern übertragen
Hi,
wie kann ich mit den InDy's einen Screenshot versenden, ohne eine Datei zu speichern oder zu laden? Der zu versendende Screenshot liegt im Speicher als BMP vor.

maxk


maxk - Fr 07.03.03 21:06

So, damit der Post nicht unbeantwortet bleibt, hier die Lösung:
Ich empfehle mit einem JPEG zu arbeiten, da dieses wesentlich kleiner ist als ein Bitmap. Die Umwandlung BMP->JPEG soll hier nicht weiter interessieren. Hier also der Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var MS:TMemoryStream:
begin
 MS:=TMemoryStream.Create;
 JPEG.SaveToStream(MS);
 MS.Position:=0;
 Client.WriteStream(MS); // Client bezeichnet die Indy-Komponente
 MS.free;
end;

Das kann dann so wieder empfangen werden:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var MS:TMemoryStream;
begin
 MS:=TMemoryStream.Create;
 Client.ReadStream(MS);
 MS.Position:=0; // ist sehr wichtig, da TJpegImage sonst streikt
 JPEG.LoadFromStream(MS);
 MS.free;
end;

Der Code speichert keine Daten auf der HD. (Virtueller Speicher zählt nicht :twisted: )

maxk