AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung TCameraComponent nutzt den Autofocus nicht.
Thema durchsuchen
Ansicht
Themen-Optionen

TCameraComponent nutzt den Autofocus nicht.

Ein Thema von QuickAndDirty · begonnen am 7. Jun 2016 · letzter Beitrag vom 3. Dez 2018
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#1

TCameraComponent nutzt den Autofocus nicht.

  Alt 7. Jun 2016, 11:02
Hallo,
ich wollte den ZebraCrossingLibrary-Delphi-Port testen.
https://github.com/Spelt/ZXing.Delphi
Die hier mitgelieferte "aTestApp" nutz den scheinbar den Autofocus oder Abstandssensor der Android Camera nicht.

Es wird die Firemonkey Komponente

TCameraComponent verwendet.

TCameraCompenent.FocusMode := TFocusMode.ContiousAutoFocus führt zu einem Segmentation fault.


Edit: Die Lösung die funktioniert wäre im moment für $80-$240
http://www.winsoft.sk/acamera.htm
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;
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 7. Jun 2016 um 13:36 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#2

AW: TCameraComponent nutzt den Autofocus nicht.

  Alt 19. Jun 2016, 10:47
Kannst du dazu mal bitte unter quality.embarcadero.com entsprechende(n) Report(s) anlegen? Sonst macht EMBT nämlich höchstwahrscheinlich nix daran.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#3

AW: TCameraComponent nutzt den Autofocus nicht.

  Alt 21. Jun 2016, 17:54
Kannst du dazu mal bitte unter quality.embarcadero.com entsprechende(n) Report(s) anlegen? Sonst macht EMBT nämlich höchstwahrscheinlich nix daran.
Ich glaube nur mein Chef hat zugang zur sogenannten Quality-Central...

Für mich wäre es ok wenn du es reportest.

Kannst du den Fall für dich nachvollziehen?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#4

AW: TCameraComponent nutzt den Autofocus nicht.

  Alt 22. Jun 2016, 18:00
Hallo,

bitte wirklich selber den Report anlegen, weil du dich mit der Thematik einfach am besten auskennst.

Der Login zu www.quality.embarcadero.com ist einfach dein EDN account. Falls du keinen hast kannst
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:
https://members.embarcadero.com/logi...barcadero.com/

Grüße

TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TCameraComponent nutzt den Autofocus nicht.

  Alt 23. Jun 2016, 04:13
...nur ohne WWW. zu finden. (Sorry )

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#6

AW: TCameraComponent nutzt den Autofocus nicht.

  Alt 3. Dez 2018, 10:51
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:

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_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;
folgende Änderung in lokaler kopie von FMX.Media.Pas
Delphi-Quellcode:
TCameraComponent = class(TFmxObject)
private
    [...]
// procedure SetFocusMode(const Value: TFocusMode);// deleted line
    [...]
protected
    [...]
public
    [...]
    procedure SetFocusMode(const Value: TFocusMode);// moved line
    [...]
published
[...]
end;
Wie im QC-Workaround beschrieben den Focusmode per "SetFocusMode" statt per Focusmode Property setzen.
Andreas
Monads? Wtf are Monads?
  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 11:34 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