AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Inhalt von TMemoryStream als String auslesen?

Inhalt von TMemoryStream als String auslesen?

Ein Thema von LDericher · begonnen am 12. Dez 2008 · letzter Beitrag vom 12. Dez 2008
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 17:35
Also, Du hast einen MemoryStream mit einem Bild drin? Dann sollte Nicos Code doch mit einer kleinen Änderung funktionieren.
Delphi-Quellcode:
function StreamToString(const Buffer: TMemoryStream): AnsiString;
begin
  SetString(Result, PAnsiChar(Buffer.Memory), Buffer.Size);
end;
Falls nicht, lass Dir doch mal Buffer.Size usw. mal ausgeben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 17:40
Zitat von Superwinger:
Das funktioniert auch nicht, da bekomm nur 5 Zeichen raus
Lerne mit Delphi umzugehen.
(der Debugger interpretiert das erste #0 als Ende eines PChars, lass dir Length(Result) ausgeben)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 17:44
Zitat von Superwinger:
...
Das funktioniert auch nicht, da bekomm nur 5 Zeichen raus:
...
Guten Abend,

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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 17:48
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 17:53
Zitat von Superwinger:

P.S.: Ich bemerke gerade, dass der String definitiv nicht nur aus Leerzeichen besteht. Werde der Spur mal folgen.
Wenn Du dir mal die Mühe machst, das Bild (bmp) mit einem HexEditor (HxD) anzuschauen
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#16

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 17:57
Zitat von Klaus01:
Deswegen denke ich, es ist die falsche Methode ein Bild per String zu übertragen.
Siehe #2
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 18:03
Zitat von DeddyH:
Also, Du hast einen MemoryStream mit einem Bild drin? Dann sollte Nicos Code doch mit einer kleinen Änderung funktionieren.
Delphi-Quellcode:
function StreamToString(const Buffer: TMemoryStream): AnsiString;
begin
  SetString(Result, PAnsiChar(Buffer.Memory), Buffer.Size);
end;
Falls nicht, lass Dir doch mal Buffer.Size usw. mal ausgeben.
Würde das nicht nach dem ersten 0-Byte spätestens schiefgehen?

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:
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;
(ungetestet)
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 18:33
Und wie wandle ich denn Hex-Werte zurück um nach Integer?

Hier im Forum suchenHexadezimal AND Dezimal AND umwandeln

So?
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 18:56
Zitat von inherited:
Delphi-Quellcode:
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;
Funtioniert so weit, nach kleinen Änderungen.
Habe dazu mal 'ne inverse Funktion gebastelt, nur die will nicht ganz klappen:
Delphi-Quellcode:
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;
Finde meinen Fehler nicht...
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: Inhalt von TMemoryStream als String auslesen?

  Alt 12. Dez 2008, 19:15
http://www.delphipraxis.net/internal...=975595#975595

Gelöst.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz