2017-10-13 114 views
0

我使用Camera2 API來創建一個攝像頭組件,可以掃描條形碼和掃描已期間的拍照能力處理框架。這是有點工作,但預覽閃爍 - 它似乎像以前的幀,有時綠色框架中斷實時預覽。的Android Camera2拍照而

我的代碼是基於谷歌的Camera2Basic。我只是再添加一個ImageReader,並將其表面作爲新的輸出和目標CaptureRequest.Builder。其中一個閱讀器使用JPEG和另一個YUV。當我從輸出中移除JPEG閱讀器的表面時,閃爍消失(未將其傳入createCaptureSession)。

有相當多的代碼,所以我創建了一個要點:click - 試圖擺脫完全無關的代碼。

+0

'提前致謝!'如果​​您認爲您可以提前致謝,您肯定無法獲得幫助。我們不是那樣的。 – greenapps

+0

你寫過你正在使用Nexus 5.你使用哪種ROM? –

+0

實際上在兩個Nexus 5上測試了這一點,其中一個使用Android 5.1和另一個6.0。根本沒有生根 – aalices

回答

0

如果有人曾經爲此奮鬥過。在docs中有表格,如果指定了3個目標,則YUV ImageReader可以使用最大尺寸等於預覽尺寸(最大1920x1080)的圖像。減少這個幫助!

1

是你一個LEGACY -level設備上測試的設備?

如果是這樣,靶向JPEG輸出任何捕獲可能慢得多,因爲它們可以運行一個precapture序列,並可能略微停頓一下,預覽以及。

但應該不會造成綠色框架,除非有一個設備級的錯誤。

+0

它是一個Nexus 5,所以沒有 - 不是一個LEGACY設備。 – aalices

0

是的,你可以。假設您配置預覽飼料用YUV幀的ImageReader(因爲你也可以把JPEG那裏,檢查出來),就像這樣:

mImageReaderPreview = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 1); 

您可以處理您的OnImageAvailable監聽器裏的那些幀:

@Override 
public void onImageAvailable(ImageReader reader) { 
    Image mImage = reader.acquireNextImage(); 
    if (mImage == null) { 
     return; 
    } 

    try { 

// Do some custom processing like YUV to RGB conversion, cropping, etc. 

     mFrameProcessor.setNextFrame(mImage)); 
     mImage.close(); 
    } catch (IllegalStateException e) { 
     Log.e("TAG", e.getMessage()); 
}