Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Probleme bei TImage unter Android (https://www.delphipraxis.net/207488-probleme-bei-timage-unter-android.html)

gro 29. Mär 2021 12:27

Probleme bei TImage unter Android
 
Folgendes Problem:
Ich habe eine Server - Clientanwendung
Am Server wird ein Bild geladen und das via Tcp zum Client gesendet und soll dann in einem TImage angezeigt werden.
So weit so gut, unter Windows funktioniert das ganze tadellos nur unter Android gibts ein Problem.
Beim Laden des Bildes mit image1.Bitmap.LoadFromStream(aFileData); kommt es zu folgenden Fehler

"Das Projekt hat die Exception-Klasse Segmentation fault(11) ausgelöst." und danach kommt
"Im Projekt ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 9CC26762 beim Zugriff auf Adresse 00000000 aufgetreten."

Hintergrund:
Die Bilddaten werden als String durch die Gegend gesendt und die schauen im Debuger und Android eigentlich gut aus.

Ich habe jetzt folgendes versucht.
1. Die Bilddaten zurück auf den Server gesendet und dort abgespeichert. Eregebnis: OK. Das Bild passt
2. Die Bilddaten lokal am Android-Device gespeichert. Ergebnis: Schrott. Die Datei kann mit dem internen Android-Bildbetrachter nicht angezeigt werden.

Scheinbar habe ich da ein Problem mit den Strings. Nur wie könnte ich das lösen

Delphi-Quellcode:

var
  szScanData : String;
  szScanData := GetScanData;
 
  aFileData := TStringStream.Create(szScanData);
  aFileData.Position := 0;
  image1.Bitmap.LoadFromStream(aFileData);

TiGü 29. Mär 2021 12:51

AW: Probleme bei TImage unter Android
 
Ich würde mit einem Hex-Editor die Ursprungsdatei mit dem lokal auf dem Android-Device vergleichen.
Mit dem GetScanData würde mich schon noch interessieren. Schickst du da Base64 kodierte Binärdateien?
Du musst auch das Encoding der jeweiligen Plattform achten. Das ist ggf. unterschiedlich (ANSI; UTF-8; UTF-16...).

himitsu 29. Mär 2021 12:59

AW: Probleme bei TImage unter Android
 
Binär-Daten durch einen "Unicode"-String zu jagen, wer kommt denn auf so eine saublöde Idee?

Als Base64 verpackt, oder Ähnliches, würde noch gehen, aber niemals Binärzeugs in einer StringVariable.

TurboMagic 29. Mär 2021 18:34

AW: Probleme bei TImage unter Android
 
Kann Himitsu nur zustimmen!
Nimm TBytes oder einen Byte Stream...

gro 30. Mär 2021 10:04

AW: Probleme bei TImage unter Android
 
Besten Dank für die Anregungen.
Habe das ganze auf TBytes umgestellt und das Encoding auf TEncoding.ANSI.GetBytes geändert und schon funktionier es.

Anmerkung:
Warum steht der Datenstream das Images in einen String?
Weil das Image von einem Fremdsystem als Hexstring in der Form 00FF00D800FF..., geliefert wird
und ich auf dieses System leider keinerlei Zugriff bzw. Einfluss habe.

Aber besten Dank, Problem gelöst


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf