Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Image als Base64 codieren. Unterschiede FMX und VCL (https://www.delphipraxis.net/180693-image-als-base64-codieren-unterschiede-fmx-und-vcl.html)

GS1200 9. Jun 2014 20:50

Delphi-Version: 5

Image als Base64 codieren. Unterschiede FMX und VCL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich habe folgendes Problem:

Ich will via WEB-Service eine Unterschrift versenden. (Beispiel aus dem Video: YouTube) Das Erstellen klappt einwandfrei. Dazu codiere ich den Stream als Base64 und sende dieses. Der WEB-Service kann aber die Base64 Datei nicht entschlüsseln. Lese ich die Datei (Zwischengespeichert als Textdatei) in eine Testroutine (FMX ImageControl.Bitmap) klappt es einwandfrei.
Ich vermute hier ein Formatunterschied JPeg, BMP etc. aber wie kann ich bei einem Stream das Format mitgeben?

So erstelle ich den Base64 String und sende diesen über den WEB-Service:
Delphi-Quellcode:
...
stream := TMemoryStream.Create();
ImageControl1.Bitmap.SaveToStream(stream);
encodeString := EncodeBase64(stream.Memory, stream.Size);

unt.UnterschriftB64 := encodeString;

WS := TWebServices.Create();
er := WS.AusgabeMitUnterschrift(unt);
...

Mit diesem Test lese ich die als Text zwischengespeicherte Datei ein, Anzeige Problemlos:
Delphi-Quellcode:
...
b64 := TStringList.Create();
b64.LoadFromFile('Bild_DatenB64.txt');
// Test ob Bild enthalten...
OutStr := TBytesStream.Create(DecodeBase64(b64.Text));
//OutStr := TBytesStream.Create(DecodeBase64(unt.UnterschriftB64));
ImageControl2.Bitmap.LoadFromStream(OutStr);
...
Diese VCL-Anwendung kann daraus aber kein Bildmachen....

Delphi-Quellcode:
...
str := TStringList.Create();
str.loadFromFile('Bild_DatenB64.txt');
OutStr := TBytesStream.Create(DecodeBase64(str.Text));
image1.Picture.Bitmap.LoadFromStream(OutStr);
...
Ich habe die Base64.txt mal als Beispiel in der Anlage abgelegt.

Was kann das sein?

Gruß

Axel

Harry Stahl 9. Jun 2014 21:46

AW: Image als Base64 codieren. Unterschiede FMX und VCL
 
In Wahrheit speichet Fmx die Grafik nicht als Bitmap sondern im png-format. Du musst eine eigene Lösung entwickeln, um in den Stream das Bitmap- Format zu speichern. Wie das geht, habe ich schon mal im Zusammenhang mit der Übergabe eines Bitmap-Streams an eine Dll gezeigt, das kannst Du hier nachlesen:

http://devpage.de/blog/firemonkey.htm

Das Beispiel gilt für XE5 und wohl auch XE6 (evtl. auch schon XE4, weiß es im Moment leider nicht auswendig).


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 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