![]() |
TCameraComponent nutzt den Autofocus nicht.
Hallo,
ich wollte den ZebraCrossingLibrary-Delphi-Port testen. ![]() Die hier mitgelieferte "aTestApp" nutz den scheinbar den Autofocus oder Abstandssensor der Android Camera nicht. Es wird die Firemonkey Komponente TCameraComponent verwendet.
Delphi-Quellcode:
führt zu einem Segmentation fault.
TCameraCompenent.FocusMode := TFocusMode.ContiousAutoFocus
Edit: Die Lösung die funktioniert wäre im moment für $80-$240 ![]() zu kaufen und TACamera im focus mode "Macro" zu betreiben. Das funktioniert dann nicht für IOS. So einen fix für TCameraComponent gibts nicht? Gibts eine Lösung dazu? Es gibt anlagen dazu. unit Androidapi.JNI.Hardware
Delphi-Quellcode:
JCamera_ParametersClass = interface(JObjectClass)
{class} property FOCUS_MODE_AUTO: JString read _GetFOCUS_MODE_AUTO; {class} property FOCUS_MODE_CONTINUOUS_PICTURE: JString read _GetFOCUS_MODE_CONTINUOUS_PICTURE; {class} property FOCUS_MODE_CONTINUOUS_VIDEO: JString read _GetFOCUS_MODE_CONTINUOUS_VIDEO; {class} property FOCUS_MODE_EDOF: JString read _GetFOCUS_MODE_EDOF; {class} property FOCUS_MODE_FIXED: JString read _GetFOCUS_MODE_FIXED; {class} property FOCUS_MODE_INFINITY: JString read _GetFOCUS_MODE_INFINITY; {class} property FOCUS_MODE_MACRO: JString read _GetFOCUS_MODE_MACRO; Nur hier wird es dann NICHT gemacht Und TFocusMode ist auf genau die 3 beschnitten...
Delphi-Quellcode:
procedure TAndroidVideoCaptureDevice.SetFocusMode(const Value: TFocusMode);
var Params: JCamera_Parameters; begin Params := Camera.getParameters; if Params = nil then Exit; case Value of TFocusMode.AutoFocus: Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO); TFocusMode.ContinuousAutoFocus: Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE); TFocusMode.Locked: Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_FIXED); end; Camera.setParameters(Params); end; |
AW: TCameraComponent nutzt den Autofocus nicht.
Kannst du dazu mal bitte unter quality.embarcadero.com entsprechende(n) Report(s) anlegen? Sonst macht EMBT nämlich höchstwahrscheinlich nix daran.
|
AW: TCameraComponent nutzt den Autofocus nicht.
Zitat:
Für mich wäre es ok wenn du es reportest. Kannst du den Fall für dich nachvollziehen? |
AW: TCameraComponent nutzt den Autofocus nicht.
Hallo,
bitte wirklich selber den Report anlegen, weil du dich mit der Thematik einfach am besten auskennst. Der Login zu ![]() du kostenlos einen anlegen. Es muss auch kein Delphi auf den Account registriert werden um einen Bugreport zu erfassen. Link zur EDN loginseite wo auch ein "Join Today" link zum Anlegen eines Kontos drauf ist: ![]() Grüße TurboMagic |
AW: TCameraComponent nutzt den Autofocus nicht.
Zitat:
![]() Freundliche Grüsse |
AW: TCameraComponent nutzt den Autofocus nicht.
Es gibt ja diesen Workaround auf QC...der nicht für mich funktioniert.
Aber ich habe ihn Modifiziert und das funktioniert für mich. Da die Camera in dieser App ja Barcodes von zetteln oder aufklebern scannen soll und diese in der regel "nah" sind. Also sorge ich dafür das ContinuousAutoFocus immer den Makro mode aktiviert.. Ist etwas QuickAndDirty... Folgende Änderung in lokaler Kopie von FMX.MEDIA.ANDROID.pas
Delphi-Quellcode:
folgende Änderung in lokaler kopie von FMX.Media.Pasprocedure TAndroidVideoCaptureDevice.SetFocusMode(const Value: TFocusMode); var Params: JCamera_Parameters; begin Params := Camera.getParameters; if Params = nil then Exit; case Value of TFocusMode.AutoFocus: Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO); TFocusMode.ContinuousAutoFocus: Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_MACRO); //Changed Line //Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE); TFocusMode.Locked: Params.setFocusMode(TJCamera_Parameters.JavaClass.FOCUS_MODE_FIXED); end; Camera.setParameters(Params); if Value in [TFocusMode.AutoFocus, TFocusMode.ContinuousAutoFocus] then //Added line Camera.autoFocus(nil);//Added line end;
Delphi-Quellcode:
Wie im QC-Workaround beschrieben den Focusmode per "SetFocusMode" statt per Focusmode Property setzen.
TCameraComponent = class(TFmxObject)
private [...] // procedure SetFocusMode(const Value: TFocusMode);// deleted line [...] protected [...] public [...] procedure SetFocusMode(const Value: TFocusMode);// moved line [...] published [...] end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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