![]() |
Inhalt von TMemoryStream als String auslesen?
Hallo DP!
Ich krieg' noch zu viel bei dem Mist :D Ich versuche wie besessen, ein Bild, das ich in einem TMemoryStream habe, in einen String zu packen - komm aber nicht gut dabei weg. Hat wer nen akuten Einfall? (->Problem: Inhalt eines TMemoryStream in einen string laden) Ich habe es auch schon mit TStringStream versucht - Geht nicht! Danke im Voraus für eine Antwort, Euer LDer. |
Re: Inhalt von TMemoryStream als String auslesen?
Wieso willst Du ein Bild in einen String packen? Da kann doch nichts Gescheites bei herauskommen :gruebel:
|
Re: Inhalt von TMemoryStream als String auslesen?
|
Re: Inhalt von TMemoryStream als String auslesen?
pack die daten doch in einen tstringstream und benutze dann tstringstream.datastring :)
|
Re: Inhalt von TMemoryStream als String auslesen?
Aso, klingt aber ein bisschen nach "von hinten durch die Brust ins Auge".
|
Re: Inhalt von TMemoryStream als String auslesen?
Delphi-Quellcode:
var
S: AnsiString; Buffer: TMemoryStream; begin SetString(S, PAnsiChar(Buffer.Memory), Buffer.Size); end; |
Re: Inhalt von TMemoryStream als String auslesen?
oder so:
![]() |
Re: Inhalt von TMemoryStream als String auslesen?
Kann mir denn wirklich NIEMAND helfen?
Ausnahmsweise suche ich mal eine konkrete LÖSUNG oder einen quasi perfekten ANSATZ, nicht nur irgendeinen... Ich bin hier am Verzweifeln! :pale: Kann nicht mal wer negaH rufen? Unser Overkiller kann das doch bestimmt! :D Danke. LDer. PS: Eure Lösungsansätze da sind zwar bestimmt nett gemeint, aber ich sagte bereits: TStringStream FUNKTIONIERT NICHT! Ich hab es ja versucht:
Delphi-Quellcode:
Und nein, ICH WILL KEINEN STRING IN EINEN STREAM LADEN!
function BitmapToString(Input:TBitmap):string;
var P:TStringStream; CurChar:int64; begin P:=TStringStream.Create(''); Input.SaveToStream(P); Result:=''; P.Position:=0; Result:=P.DataString; P.Free; end; ICH HABE EINEN STREAM MIT EINEM BILD! ICH WILL EINEN STRING! RUFT NEGAH! DER KANNS! BESTIMMT! Add: Das funktioniert auch nicht, da bekomm nur 5 Zeichen raus:
Delphi-Quellcode:
function BitmapToString(Input:TBitmap):string;
var P:TMemoryStream; CurChar:int64; begin P:=TMemoryStream.Create; Input.SaveToStream(P); Result:=''; P.Position:=0; SetString(Result, PAnsiChar(P.Memory), P.Size); P.Free; end; |
Re: Inhalt von TMemoryStream als String auslesen?
|
Re: Inhalt von TMemoryStream als String auslesen?
Zitat:
Zitat:
Und ich bin Vertreter der Theorie, dass sich solche Ausbrüche vermeiden ließen, wenn die User erst mal lesen, ggf. Fragen stellen und DANN erst ihren Senf dazugeben würden... Der LDer. Edith: Dazu kommt noch, dass ich es komfortabler finde, in Großbuchstaben zu schreiben, als BBCodes zu verwenden -> so fett und so :D Naja egal, so oder so musste das raus ;) |
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:34 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