2013-02-22 4 views
8

Jak stworzyć wielo soczewki lub podglądu przy użyciu jednej kamery w Androidzie

Chciałem stworzyć coś takiego jak powyżej, że trzy skrzynki, będzie jak podglądu kamery. Jakiś pomysł czy koncepcja, co robić?

Próbowałem uzyskać instancję kamery i umieścić ją na trzech obiektach kamery, ale otrzymuję komunikat o błędzie, chyba nie jest to dozwolone. tutaj jest mój kod:

private CameraPreview mPreview; 
    private CameraPreview mPreview2; 
    private CameraPreview mPreview3; 
    private FrameLayout preview; 
    private FrameLayout preview2; 
    private FrameLayout preview3; 

    mCamera=getCameraInstance(); 
    mCamera2=getCameraInstance(); 
    mCamera3=getCameraInstance(); 

    mPreview=new CameraPreview(getApplicationContext(), mCamera); 
    mPreview2=new CameraPreview(getApplicationContext(), mCamera2); 
    mPreview3=new CameraPreview(getApplicationContext(), mCamera3); 

    preview=(FrameLayout)findViewById(R.id.camSetA_qr1); 
    preview.addView(mPreview); 
    preview2=(FrameLayout)findViewById(R.id.camSetA_qr1); 
    preview2.addView(mPreview2); 
    preview3=(FrameLayout)findViewById(R.id.camSetA_qr1); 
    preview3.addView(mPreview3); 

i mój kod getInstance

public static Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     c = Camera.open(); 
    } catch (Exception e) { 
    } 
    return c; 
} 
+2

Może Możesz umieścić obraz powyżej ekranu aparatu za pomocą trzech przezroczystych kwadratów? –

+0

yah, też o tym myślałem, ale czy jest jakaś inna opcja poza tym? –

+1

Proponuję tę opcję, ponieważ pozwoli to zaoszczędzić cenną pamięć. Być może byłoby również możliwe zapisanie wyjścia kamery w buforze, a następnie każda klatka reprezentuje w każdym z kwadratowych obrazów? Wciąż nie znam innych możliwości, ponieważ jestem facetem z iPhone'em. –

Odpowiedz

3

można otworzyć tylko dany aparat (przód lub tył) raz; nie można wielokrotnie otworzyć kamery, aby uzyskać wiele strumieni podglądu. W rzeczywistości na większości urządzeń nie można jednocześnie otwierać kamer przedniej i tylnej, ponieważ potok przetwarzania kamery jest dzielony między dwie kamery.

W tym celu wystarczy jednorazowo otworzyć aparat, a następnie podzielić dane podglądu wydruku na trzy wyświetlane części.

Jeśli musisz uruchomić system Android w wersjach wcześniejszych niż 3.0 (Honeycomb), musisz użyć wersji preview callbacks. Dzięki nim otrzymasz tablicę bajtów [] danych YUV dla każdej ramki, którą możesz następnie przyciąć, przekonwertować na RGB i umieścić w ImageView lub SurfaceView.

W systemie Android 3.0 lub nowszym można użyć metody setPreviewTexture, aby przesłać dane podglądu do tekstury OpenGL, którą można następnie renderować do wielu quadów w interfejsie GLSurfaceView lub równoważnym.

Powiązane problemy