Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PictureToString ? (https://www.delphipraxis.net/66584-picturetostring.html)

MrKnogge 31. Mär 2006 19:51


PictureToString ?
 
Hallo,

Ich würde gerne ein Bild in einen string umwandeln, hat jemand eine Idee wie ich eine
Funktion "PictureToString" realisieren kann ?

gruss

Nicodius 31. Mär 2006 19:53

Re: PictureToString ?
 
naja wie sollte das endprodukt aussehen?

MrKnogge 31. Mär 2006 19:56

Re: PictureToString ?
 
Was meinst du genau, welche Zeichen alle verwendet werden dürfen ?
Alle.

Das Bild möchte ich natürlich durch eine Gegen-Funktion "StringToPicture" wieder bekommen können.

gruss

alzaimar 31. Mär 2006 19:57

Re: PictureToString ?
 
Benutze einen StringStream und schreibe das Bild als 'SaveToStream' dort rein. Dann kannst Du mit der Eigenschaft 'DataString' (?) den String auslesen.

Ich hatte das mal angedacht, um plattformübergreifend binäre Daten zu verschicken. Das geht zwar, aber Variants sind besser. Finde ich.

MrKnogge 31. Mär 2006 20:01

Re: PictureToString ?
 
thx, werde ich gleich mal testen :thumb:
Variant würde eventuell auch gehen, müsste ich mal ausprobieren, wie bekomm ich denn ein Bild am einfachsten in ein Variant ?

toms 31. Mär 2006 20:07

Re: PictureToString ?
 
Bei Google suchenPictureToString

ichbins 31. Mär 2006 20:10

Re: PictureToString ?
 
einfach jedem Pixel kopieren?

Delphi-Quellcode:
function inttohexstr(i:integer):string;
begin
  Eben integerwert in einen hexstring verwandeln, genug Beispiele im Forum
end;

procedure bmptostr;
var
  b:tbitmap;
  s:string;
  x,y:integer;
begin
  ... (bmp erstellen)
  s:=inttohexstr(b.width)+inttohexstr(b.height);
  for x:=1 to b.with do
    for y:=1 to b.height do
    begin
      s:=s+inttohexstr(integer(b.pixels[x,y]));
    end;
end;
Umkehrfunktion kannst du dir ja denken (ichbins.schreibfaul:=true;)

himitsu 31. Mär 2006 21:07

Re: PictureToString ?
 
@ichbins
meinst du nicht, daß sowas extrem langsam ist ... die vielen Stringoperationen?

z.B. für pf8bit:
Delphi-Quellcode:
s := inttohex(b.width, 8) + inttohex(b.height, 8);
for y := 0 to b.height - 1 do
  s := s + toHexBE(b.ScanLine[y], b.width);
z.B. für pf24bit:
Delphi-Quellcode:
s := inttohex(b.width, 8) + inttohex(b.height, 8);
for y := 0 to b.height - 1 do
  s := s + toHexBE(b.ScanLine[y], 3 * b.width);
//oder
s := inttohex(b.width, 8) + inttohex(b.height, 8)
  + toHexBE(b.ScanLine[y], 3 * b.width * b.height);

Delphi-Quellcode:
Function toHexBE(Data: Pointer; Size: LongInt): String;
  Const H: Array[0..15] of Char = '0123456789ABCDEF';

  Var i: Integer;
    R: Char;

  Begin
    SetLength(Result, Size * 2);
    R := PChar(Result);
    While Size > 0 do Begin
      R^ := H[PByte(Data)^ shr 4];
      Inc(R);
      R^ := H[PByte(Data)^ and $0F];
      Inc(R);
      Inc(Integer(Data));
      Dec(Size);
    End;
  End;
//i hof ma ich hab's richtig übersetzt °_°

alzaimar 3. Apr 2006 07:42

Re: PictureToString ?
 
Delphi-Quellcode:
Procedure StringToBitmap (Const aValue: String; aBitmap : TBitmap);
Var
  s: TStringStream;

Begin
  s := TStringStream.Create(aValue);
  Try
    aBitmap.LoadFromStream (S);
  Finally
    s.free
  End;
End;

Procedure BitmapToString (aBitmap : TBitmap; Var aString : String);
Var
  S : TStringStream;

Begin
  S := TStringStream.Create;
  Try
    aBitmap.SaveToStream (S);
    aString : =S.DataString;
  Finally
    M.Free;
  End;
End;

DGL-luke 3. Apr 2006 16:21

Re: PictureToString ?
 
Dazu sage ich nur: Wenn das erste Pixel vom Bild schwarz ist, kannst du den schönen string vergessen. zumindest wenn man mit API-funktionen arbeitet und das ganze dann z.B. in ein Memo haben will.

Ich gehe mal davon aus, dass es nur aus buchstaben und zahlen bestehen soll. Ich würde da dann mal auf Bei Google suchenBASE-64 und ähnliches verweisen.

Ansonsten kann man auch einen ByteArray benutzen, anstatt einen string als solchen zu missbrauchen... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Seite 1 von 2  1 2      

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