![]() |
PictureToString ?
Hallo,
Ich würde gerne ein Bild in einen string umwandeln, hat jemand eine Idee wie ich eine Funktion "PictureToString" realisieren kann ? gruss |
Re: PictureToString ?
naja wie sollte das endprodukt aussehen?
|
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 |
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. |
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 ? |
Re: PictureToString ?
|
Re: PictureToString ?
einfach jedem Pixel kopieren?
Delphi-Quellcode:
Umkehrfunktion kannst du dir ja denken (ichbins.schreibfaul:=true;)
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; |
Re: PictureToString ?
@ichbins
meinst du nicht, daß sowas extrem langsam ist ... die vielen Stringoperationen? z.B. für pf8bit:
Delphi-Quellcode:
z.B. für pf24bit:
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);
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 °_° |
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; |
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 ![]() Ansonsten kann man auch einen ByteArray benutzen, anstatt einen string als solchen zu missbrauchen... ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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 by Thomas Breitkreuz