![]() |
Re: Inhalt von TMemoryStream als String auslesen?
Also, Du hast einen MemoryStream mit einem Bild drin? Dann sollte Nicos Code doch mit einer kleinen Änderung funktionieren.
Delphi-Quellcode:
Falls nicht, lass Dir doch mal Buffer.Size usw. mal ausgeben.
function StreamToString(const Buffer: TMemoryStream): AnsiString;
begin SetString(Result, PAnsiChar(Buffer.Memory), Buffer.Size); end; |
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
(der Debugger interpretiert das erste #0 als Ende eines PChars, lass dir Length(Result) ausgeben) |
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
kann das vielleicht daran liegen, dass das 6 Zeichen ein #0 Zeichen war/ist? Ich denke mal, das Strings mit diesen Zeichen nicht so wollen. Kann man denn mit TWinSock keine binäre Zeichen übertragen? Muss man dazu Strings nehmen? Streams oder Buffer wären da wohl angebrachter. Grüße Klaus |
Re: Inhalt von TMemoryStream als String auslesen?
An DeddyH:
Geht nicht. Wie vorhergesehen. Und wenn ich mir das als ShowMessage ausgeben lasse, kommt eine Message, die ca. 100 Meter breit und 15cm hoch ist, auf meinem Bildschirm ans Licht. Nur, dass die einzigen sinnvollen Zeichen darin "BMfu" - am Anfang - sind, der Rest ist in einem schlichten Mausgrau gehalten. Und Stream.Size liefert einen Wert um die 30000, also im gesunden Bereich. LDer. P.S.: Ich bemerke gerade, dass der String definitiv nicht nur aus Leerzeichen besteht. Werde der Spur mal folgen. |
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
wirst Du merken, dass es sehr viele Zeichen enthält die in einem Bereich liegen welche nicht darstellbar sind. Deswegen denke ich, es ist die falsche Methode ein Bild per String zu übertragen. Grüße Klaus |
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
|
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
Vielleicht soltle man das Bild lieber sicherheitshalber in Hex-Strings konvertieren. ist zwar größer, aber schöner. Der Ansatz wurde auch schon genannt
Delphi-Quellcode:
(ungetestet)
function BitmapToString(b: TBitmap): String;
var ms: TMemoryStream; a: Int64; buffer: Array[0..1024] of Byte; begin result := ''; ms := TMemoryStream.Create; try b.SaveToStream(ms); ms.Seek(0, soFromBeginning); a := 0; while a <> 0 do begin a := ms.read(buffer[0], length(buffer)); for i := 0 to a-1 do begin result := result + IntToHex(buffer[i], 2); end; end; finally ms.Free; end; end; |
Re: Inhalt von TMemoryStream als String auslesen?
Und wie wandle ich denn Hex-Werte zurück um nach Integer?
![]() So? :D |
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
Habe dazu mal 'ne inverse Funktion gebastelt, nur die will nicht ganz klappen:
Delphi-Quellcode:
Finde meinen Fehler nicht...
function StringToBitmap(Input:string):TBitmap;
var P:TMemoryStream; I:integer; B:Byte; begin P:=TMemoryStream.Create; I:=1; while(I<=Length(Input))do begin B:=StrToInt('$'+copy(Input, I, 2)); P.Write(B, 1); inc(I, 2); end; Result:=TBitmap.Create; Result.LoadFromStream(P); P.Free; end; |
Re: Inhalt von TMemoryStream als String auslesen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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