Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bild als String übertragen? (https://www.delphipraxis.net/125811-bild-als-string-uebertragen.html)

LDericher 12. Dez 2008 19:15

Re: Bild als String übertragen?
 
Delphi-Quellcode:

function BitmapToString(b: TBitmap): String;
var ms: TMemoryStream;
  a: Int64;
  i:integer;
  buffer: Array[0..1024] of Byte;
begin
  result := '';
  ms := TMemoryStream.Create;
  try
    b.SaveToStream(ms);
    ms.Position:=0;
    a := 1;
    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;

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;
P.Position:=0;
Result:=TBitmap.Create;
Result.LoadFromStream(P);
P.Free;
end;
Das geht genauso wie deins, Deddy ;)
Gelöst!

Thx vom LDer!

turboPASCAL 12. Dez 2008 19:27

Re: Bild als String übertragen?
 
Meines ist schon schneller, gelle. ;)

Luckie 12. Dez 2008 19:49

Re: Bild als String übertragen?
 
Also irgndwie macht ihr da Quatsch. Mit den Sockets kann man auch binäre Daten übertragen, da bin ich mir ziemlich sicher. Und wenn es schon als String sein muss, warum codiert ihr die Datei nicht in BaseXX oder so was?

inherited 12. Dez 2008 20:00

Re: Bild als String übertragen?
 
Tun wir doch? :gruebel:
Der Threadersteller hatte vorgegeben, dass es per String sein soll. Was weiß denn ich warum :stupid:

LDericher 13. Dez 2008 11:45

Re: Bild als String übertragen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich bin so weit durch damit:
Angelegt zwei Units, mit denen sich Grafiken in Strings verwandeln lassen.

LDer.

LDericher 13. Dez 2008 12:06

Re: Bild als String übertragen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Nochmal verfeinert: Bei beiden Units habe ich nun BASE64-Strings aktiviert.
Also BitmapToBaseString/JPEGToBaseString liefern nun die kleinsten Daten.

Sunlight7 13. Dez 2008 14:58

Re: Bild als String übertragen?
 
Zitat:

Zitat von Luckie
Also irgndwie macht ihr da Quatsch. Mit den Sockets kann man auch binäre Daten übertragen, da bin ich mir ziemlich sicher.

Da hat er recht, einfach mal Delphi-Referenz durchsuchenSendBuf verwenden, erspart das unnötige hin und her rechnen ;)


Edit:
Delphi-Quellcode:
for i := 0 to a-1 do
   result := result + IntToHex(buffer[i], 2);
Aua, das tut dem Speichermanager richtig weh...

Delphi-Quellcode:
for i := 0 to a-1 do
   AppendStr(Result, IntToHex(buffer[i], 2));

sx2008 13. Dez 2008 17:19

Re: Bild als String übertragen?
 
Es gibt ja auch den TStringStream.
Damit wird's kurz & knackig:
Delphi-Quellcode:
function BitmapToString(Input: TBitmap): String;
var ms: TStringStream;
begin
  ms := TStringStream.Create('');
  try
    Input.SaveToStream(ms);
    Result := ms.DataSring;
  finally
    ms.Free;
  end;
end
Für die Umkehrfunktion bitte beachten, dass man dem StringStream im Konstruktor einen Inhalt mitgeben kann.

Cyf 13. Dez 2008 20:29

Re: Bild als String übertragen?
 
Was nichts daran ändert, dass es keinen Sinn macht hin und her zu rechnen.

Apollonius 13. Dez 2008 20:40

Re: Bild als String übertragen?
 
Zitat:

Zitat von Sunlight7
Delphi-Quellcode:
for i := 0 to a-1 do
   AppendStr(Result, IntToHex(buffer[i], 2));

Zitat:

Zitat von SysUtils.pas
Delphi-Quellcode:
procedure AppendStr(var Dest: string; const S: string);
begin
  Dest := Dest + S;
end;



Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr.
Seite 3 von 4     123 4      

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