Autore Topic: Camera e implementazione AutoFocus, dubbi sulla gestione  (Letto 728 volte)

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Camera e implementazione AutoFocus, dubbi sulla gestione
« il: 30 Novembre 2011, 15:18:43 CET »
0
Apro questo topic sperando di trovare supporto da voi.
Come scritto nella documentazione, il metodo della classe Camera autoFocus(AutoFocusCallback callback) fa effettuare alla Camera il focus, restituendo una CallBack(specificata nell'intestazione) il cui metodo (implementato nella nostra classe customizzata) onAutoFocus(boolean Succes, Camera usedCamera) verrà richiamato una volta terminato l'operazione di Focusing. O per lo meno questo dice la documentazione.
Infatti, una volta implementato l'autofocus e richiamato dal metodo onClick() il metodo autoFocus() viene si richiamato, ma nel caso in cui la funzione onAutoFocus() contenga operazioni come cattura dell'immagine o elaborazioni sulla stessa SurfaceView, queste interrompono il processo di messa a fuoco dell'immagine. Il mio dubbio è questo, l'implementazione e l'utilizzo del metodo onAutoFocus() è corretto?
Ho anche verificato con l'utilizzo di un Toast (che non interrompe l'operazione di Focusing) se il metodo onAutoFocus venisse richiamato realmente in seguito all'azione di Focus, con il seguente risultato: Inizio dell'operazione di focus, comparsa del Toast a video, e termine dell'operazione di focus. Se qualcuno è mai inceppato in questa problematica spero possa chiarirmi o espormi una sua possibile soluzione.

Offline Download

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
Re:Camera e implementazione AutoFocus, dubbi sulla gestione
« Risposta #1 il: 05 Dicembre 2011, 10:03:28 CET »
0
Premetto che non è una soluzione definitiva, ma semi-funzionante.
Purtroppo l'autofocus su android non funziona correttamente, e dipende spesso dal dispositivo su quale l'App gira, infatti a distanze molto ravvicinate (come nel mio caso) la fotocamera non riesce a stabilire quale sia l'oggetto da mettere a fuoco, e se la superficie (oltre che a contenere un qr code o codice a barre qualsiasi) contiene altri elementi, come testo o immagini o un qualche sfondo, tende a scegliere una distanza di fuoco inadeguata.
La scelta migliore, a parer mio, è implementare l'autofocus su un azione indipendente (Es. il tap su una voce di menu, oppure un singolo tap sulla View), in modo tale da lasciare che l'azione meccanica dell'autofocus termini senza che venga interrotta da azioni successive scaturite dall'App (come suddetto, nel caso in cui la View sul quale appare l'anteprima venga modificata, o si cerchi di utilizzare la camera per catturare l'immagine, l'evento di Autofocus viene terminato).
Altro piccolo chiarimento:

Codice: [Seleziona]
        AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){       
                @Override
                public void onAutoFocus(boolean success, Camera cam) {
                // TODO Auto-generated method stub
                }};

Nell'implementazione che vedete qui sopra, come da documentazione, la variabile booleana "success" avrà un valore TRUE nel caso in cui la fotocamera abbia il focus, FALSE nel caso contrario. Ma questo è parzialmente vero, infatti, avrà un valore TRUE se la fotocamera avrà un si un Focus, ma anche se non adatto per la messa a fuoco dell'oggetto più vicino (una soluzione, alquanto grezza, sarebbe quella di lavorare ad un implementazione di un interfaccia grafica per la gestione della Distanza di fuoco, quindi un focus manuale in poche parole, per aggirare il problema e permettere all'utente di non dover richiamare l'autofocus N volte prima di aver messo a fuoco correttamente). Vi consiglio quindi di non basarvi eccessivamente sul valore della suddetta variabile, otterreste dei risultati insoddisfacenti.