AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung FMX Bitmap von Kamera an Webservice senden
Thema durchsuchen
Ansicht
Themen-Optionen

FMX Bitmap von Kamera an Webservice senden

Ein Thema von friedt99 · begonnen am 28. Okt 2021 · letzter Beitrag vom 2. Nov 2021
Antwort Antwort
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#1

FMX Bitmap von Kamera an Webservice senden

  Alt 28. Okt 2021, 20:48
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:
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;
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
geöffnet werden.


------------------------------------


Was nicht funtkioniert:

Snippet(1): speichern Bild in TImage.
CameraComponent.SampleBufferToBitmap(imgCamera.Bitmap, True); Snippet(2): Senden an WebsService

Delphi-Quellcode:
Var ltDocument:String;
    lcStream:TStringStream;
begin
  lcStream:=TStringStream.Create;
  Try
    imgCamera.Bitmap.SaveToStream(lcStream);
    ltDocument:=TNetEncoding.Base64.Encode(lcStream.DataString);
    ..
    ..
Bei der letzten Zeile kommt die Exception:
"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

Geändert von friedt99 (29. Okt 2021 um 07:10 Uhr)
  Mit Zitat antworten Zitat
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#2

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 29. Okt 2021, 07:05
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.910 Beiträge
 
Delphi 12 Athens
 
#3

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 29. Okt 2021, 07:08
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.
https://en.delphipraxis.net/topic/43...ndroid-bitmap/
https://delphiaball.co.uk/2015/10/20...lphi-cbuilder/

Falls Du eine Windows-BMP Datei haben möchtest,
BMP wird auf mobilen Platformen nicht out-of-the-box unterstützt.
https://docwiki.embarcadero.com/Libr...apCodecManager

Da müsste man sich was "frickeln" (das habe ich aber nicht getestet):
https://stackoverflow.com/questions/...on-android-ios
  Mit Zitat antworten Zitat
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#4

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 29. Okt 2021, 07:16
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.910 Beiträge
 
Delphi 12 Athens
 
#5

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 29. Okt 2021, 07:54
Auf der "Empfangsseite" (Delphi 7) mache ich aus der PNG
ein JPEG und baue ein PDF außen rum.
Dann konvertiere doch gleich im Phone zu JPG, und spar Dir Arbeit auf der Workstation/Server
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
662 Beiträge
 
#6

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 30. Okt 2021, 12:39
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;
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#7

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 31. Okt 2021, 20:38
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?
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#8

AW: FMX Bitmap von Kamera an Webservice senden

  Alt 2. Nov 2021, 10:11
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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