2016-07-22 4 views
0

Verwenden Kamera 2 API für Androidcamera2api Auto-Capture aktuelle Vorschaurahmen

Für die Echtzeit-Bildverarbeitung habe ich einen Listener einrichten etwas Bildverarbeitung zu tun, die auf einen boolean Ausgang gibt, ob ein Bild zu erfassen oder nicht. Derzeit verwende ich camera2Raw Beispiel, das eine takePicture() hat, wenn eine Schaltfläche geklickt wird. Wie kann ich sicherstellen, dass derselbe Frame, den ich bearbeitet habe, erfasst wird und keine weiteren erfasst werden? Bitte hilf mir. Dank

Link to camera2Raw

Antwort

0

Wenn Sie eine Aufnahme in Ihrem captureSession gemacht, wird der aktuelle Frame Capture und von der aktuellen Rückruf Associate auf Ihre Capture durch onCapturePictureComplete() -Methode gehen:

mCaptureSession.capture(mPhotoRequestBuilder.build(), YourCallback, null); 

private CameraCaptureSession.CaptureCallback YourCallback = new CameraCaptureSession.CaptureCallback() { 

    @Override 
    public void onCaptureCompleted(@NonNull CameraCaptureSession session, 
            @NonNull CaptureRequest request, 
            @NonNull TotalCaptureResult result) { 

     //get the iso and time exposure from the picture 
     Integer iso = result.get(CaptureResult.SENSOR_SENSITIVITY); 
     long timeExposure = result.get(CaptureResult.SENSOR_EXPOSURE_TIME); 

     Log.i(TAG, "[mHdrCaptureCallback][HDR] Photo: " + mHdrIndex + " Exposure: " + timeExposure); 
     Log.i(TAG, "[mHdrCaptureCallback][HDR] Photo: " + mHdrIndex + " ISO " + iso); 

    } 
}; 

In der Beispiel oben habe ich eine Aufnahme gemacht und wenn es abgeschlossen ist, ist der Capture-Rückruf Anruf. Dort drucke ich einfach die Werte von Belichtung und ISO aus dem Bildergebnis. Wenn Sie jedoch ein Bild aufnehmen, wird auch der OnImageAvailable Listener von Ihrem aktuellen ImageReader aufgerufen, und dort finden Sie den aktuellen Frame und das Bild zum Speichern.

Blick auf Ihrem Beispiel in Google:

/** 
* This a callback object for the {@link ImageReader}. "onImageAvailable" will be called when a 
* JPEG image is ready to be saved. 
*/ 
private final ImageReader.OnImageAvailableListener mOnJpegImageAvailableListener 
     = new ImageReader.OnImageAvailableListener() { 

    @Override 
    public void onImageAvailable(ImageReader reader) { 
     dequeueAndSaveImage(mJpegResultQueue, mJpegImageReader); 
    } 

}; 

/** 
* This a callback object for the {@link ImageReader}. "onImageAvailable" will be called when a 
* RAW image is ready to be saved. 
*/ 
private final ImageReader.OnImageAvailableListener mOnRawImageAvailableListener 
     = new ImageReader.OnImageAvailableListener() { 

    @Override 
    public void onImageAvailable(ImageReader reader) { 
     dequeueAndSaveImage(mRawResultQueue, mRawImageReader); 
    } 

}; 

Hoffnung, dass es Ihnen helfen wird, und jetzt wissen Sie, ein bisschen besser, wie das Bild Prozessarbeit mit camera2 speichern, lassen Sie mich wissen, wenn ich dich in etwas helfen kann sonst!