2015-10-15 14 views
9

Voglio implementare la funzionalità Tocca per mettere a fuoco nella mia fotocamera personalizzata. Questo è il codice di base fornita da Google https://github.com/googlesamples/android-Camera2BasicImplementa Tocca per mettere a fuoco nell'API Camera2

Ecco il frammento di codice in cui penso che dovrei aggiungere la mia caratteristica Se qualcuno ha implementato l'API Camera2 prega di aiuto!

private void lockFocus() { 
    try { 
     // This is how to tell the camera to lock focus. 
     mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, 
       CameraMetadata.CONTROL_AF_TRIGGER_START); 
     // Tell #mCaptureCallback to wait for the lock. 
     mState = STATE_WAITING_LOCK; 
     mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, 
       mBackgroundHandler); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

risposta

12

Avrete bisogno di impostare la messa a fuoco automatica e la regione di esposizione automatica nell'area toccata dall'utente.

I tasti sono CONTROL_AF_REGIONS e CONTROL_AE_REGIONS.

Le unità per loro sono nel sensore active array coordinate system, quindi sarà necessario convertire le coordinate touch dell'interfaccia utente in coordinate relative alla vista di anteprima e da lì alle coordinate di array attive.

Se il rapporto di aspetto della tua anteprima corrisponde a quello del sensore, allora è semplice; in caso contrario, dovrai aggiustare per il ritaglio che è stato fatto per creare l'output di anteprima. Il miglior diagramma di come funziona il ritaglio è attualmente here. Notare che se si applica anche lo zoom, è necessario includere anche il fattore di zoom nei calcoli.

Una volta calcolata la regione, probabilmente si desidera impostare la modalità AF su AUTO (invece di CONTINUOUS_PICTURE che viene solitamente utilizzata per l'anteprima normale), quindi attivare AF. Una volta che converti AF (guarda lo stato AF nei risultati di cattura, attendi AF_STATE_FOCUSED_LOCKED), sei a posto per scattare una foto che è a fuoco. Se si desidera tornare al normale funzionamento dopo un po 'di tempo o se l'utente annulla il tocco per mettere a fuoco, riportare la modalità AF su CONTINUOUS_PICTURE.

+6

È possibile fornire un codice di esempio? Il codice di esempio –

+2

sarà di grande aiuto. –

1
  1. Utilizzare il listener onTouch per ottenere il punto in cui l'utente tocca lo schermo.
  2. Calcolare a/alcuni MeteringRectangle(s) in base a quella posizione.
  3. dei rettangoli questa misurazione per impostare il CaptureRequest.CONTROL_AF_REGION & CaptureRequest.CONTROL_AE_REGION

  4. impostare il CaptureRequest.CONTROL_AF_MODE di CaptureRequest.CONTROL_AF_MODE_AUTO

  5. CaptureRequest.CONTROL_AF_TRIGGER a CameraMetadata.CONTROL_AF_TRIGGER_START
  6. CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER a CameraMetadata.CONTROL_AE_TRIGGER_START

  7. Poi compilare la richiesta di acquisizione


Here si può trovare un esempio completo.


Problemi correlati