![]() |
FMX Bitmap von Kamera an Webservice senden
Hallo zusammen,
ich versuche ein Bild von der IOS Kamera an einen Websevice zu senden. (FMX Delphi 10.4, XCode 12.5.1) Was funktioniert:
Delphi-Quellcode:
Die Bitmap (wird ja bei SaveToStream als PNG gespeichert) kommt via Webservice in Delphi 7 an und kann nach Dekodierung UTF->String und Decode Base64 als PNG
Var ltDocument:String;
lcStream:TStringStream; lcBitmap:TBitmap; begin lcBitmap:=TBitmap.Create; lcStream:=TStringStream.Create; Try lcBitmap.Width:=100; lcBitmap.Height:=100; lcBitmap.Canvas.BeginScene; lcBitmap.Canvas.Fill.Color:=TAlphaColors.Red; lcBitmap.Canvas.FillRect(Rect(0,0,lcBitmap.Width,lcBitmap.height),0,0,AllCorners,1); lcBitmap.Canvas.EndScene; lcBitmap.SaveToStream(lcStream); ltDocument:=TNetEncoding.Base64.Encode(lcStream.DataString); --> ltDocument an Webservice senden Finally lcStream.Free; End; end; geöffnet werden. ------------------------------------ Was nicht funtkioniert: Snippet(1): speichern Bild in TImage.
Delphi-Quellcode:
Snippet(2): Senden an WebsService
CameraComponent.SampleBufferToBitmap(imgCamera.Bitmap, True);
Delphi-Quellcode:
Bei der letzten Zeile kommt die Exception:
Var ltDocument:String;
lcStream:TStringStream; begin lcStream:=TStringStream.Create; Try imgCamera.Bitmap.SaveToStream(lcStream); ltDocument:=TNetEncoding.Base64.Encode(lcStream.DataString); .. .. "Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden" Was für eine Konvertierung könnte da denn erforderlich sein für einen PNG Stream ? Grüße Thomas |
AW: FMX Bitmap von Kamera an Webservice senden
Hallo Zusammen,
das konnte ich nun selbst lösen. So klappt's:
Delphi-Quellcode:
uses Soap.EncdDecd;
procedure SendDocument; Var ltDocument:String; lcStream:TStringStream; begin lcStream:=TStringStream.Create; Try pcBitmap.SaveToStream(lcStream); lcStream.Position:=0; ltDocument:=EncodeBase64(lcStream.Memory,lcStream.Size); // -> Sende ltDocument an den Webservice Finally lcStream.Free; End; end; War wohl die falsche Funktion zum Base64 kodieren. Noch ein Tip für alle die mit älteren Delphi Versionen: Ich Kontaktiere den Webservice (nusoap) "zu Fuß", also sende ein XML mit den WinInet Funktionen und erhalte den Response auch so wieder zurück. Um aus den Bilddaten wieder ein PNG zu machen, zuerst UTF8 nach String dekodieren und danach DecodeBase64 aufrufen. Grüße Thomas |
AW: FMX Bitmap von Kamera an Webservice senden
Bin nicht sicher ob ich Dich richtig verstehe,
Du bekommst das TBitmap von der Kamera, und möchtest das als PNG verschicken, nicht als BMP. ![]() ![]() Falls Du eine Windows-BMP Datei haben möchtest, BMP wird auf mobilen Platformen nicht out-of-the-box unterstützt. ![]() Da müsste man sich was "frickeln" (das habe ich aber nicht getestet): ![]() |
AW: FMX Bitmap von Kamera an Webservice senden
Hallo Rollo62,
nein, es ging um eine Fehlermeldung bei der Base64 Kodierung der Bitmap unter FMX. Hatte wohl die falsche Funktion dafür genommen. Mit der PNG kann ich leben, da ich auf beiden Seiten des Webservices die Software stelle. Auf der "Empfangsseite" (Delphi 7) mache ich aus der PNG ein JPEG und baue ein PDF außen rum. Grüße Thomas |
AW: FMX Bitmap von Kamera an Webservice senden
Zitat:
|
AW: FMX Bitmap von Kamera an Webservice senden
Da ich Binärdaten (Bitmap, png, ...) ungern als String behandele, hätte ich es eher so gemacht:
Delphi-Quellcode:
Var ltDocument:String;
lcStream:TMemoryStream; lcStreamB64:TStringStream; lcBitmap:TBitmap; begin lcBitmap:=TBitmap.Create; lcStream:=TMemoryStream.Create; lcStreamB64:=TStringStream.Create; Try lcBitmap.Width:=100; lcBitmap.Height:=100; lcBitmap.Canvas.BeginScene; lcBitmap.Canvas.Fill.Color:=TAlphaColors.Red; lcBitmap.Canvas.FillRect(Rect(0,0,lcBitmap.Width,lcBitmap.height),0,0,AllCorners,1); lcBitmap.Canvas.EndScene; lcBitmap.SaveToStream(lcStream); TNetEncoding.Base64.Encode(lcStream, lcStreamB64); ltDocument:=lcStreamB64.DataString; --> ltDocument an Webservice senden Finally lcStream.Free; lcStreamB64.Free; End; end; |
AW: FMX Bitmap von Kamera an Webservice senden
Hmm..
Ein paar Fragen: Wie kommst Du darauf, dass ein TBitmap ein PNG sei? Ohne z.B. Konvertierung per TPNGImage wird auch beim Speichen kein PNG daraus... Wieso wird der Stream nach Bitmap.SaveToStream nicht direkt als Binär-Stream an den Webservice geschickt und stattdessen als aufgeblähter Base64 String? Wie sendest Du denn die Daten an den WebService? |
AW: FMX Bitmap von Kamera an Webservice senden
Hallo HolgerX,
Wenn man das Bild der CameraComponent einer TBitmap zuweist und dann die TBitmap mit SaveToFile speichert, kommt ein PNG raus... Ich sende das Bild als Base64 weil der Webservice unter nusoap (PHP) entwickelt wurde und ich da keine Möglichkeit gefunden habe, das anders zu lösen. Grüße Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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-2025 by Thomas Breitkreuz