2011-04-26 7 views
8

Pracuję na Androidzie, chcę robić coś z kamerą (wartości pikseli procesu), ale tylko w tle, czy można to zrobić bez widoku powierzchni? wystarczy użyć bufora, aby odczytać wartości pikseli i wykonać przetwarzanie. dziękuję za każdy może mi pomócUżywanie kamery Android bez widoku powierzchni

Odpowiedz

4

Szukałem odpowiedzi na to przez chwilę. Znalazłem to, skopiowałem tutaj dla wygody.

http://handycodeworks.com/?p=19

Zasadniczo, po prostu stworzyć atrapę SurfaceView (działa nawet wewnątrz a Service), oraz wykorzystanie go do funkcji aparatu.

SurfaceView view = new SurfaceView(this); 
c.setPreviewDisplay(view.getHolder()); 
c.startPreview(); 
c.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback); 
+1

Dla jakich urządzeń to działa? Wszystkie przetestowane przeze mnie urządzenia, które używają tego kodu, skutkują "E/CameraHAL (132): Błąd podczas konfigurowania obrotu" – xbakesx

+0

Testowany na: Galaxy i5800 (2.2), HTC Wildfire (2.1?) - to było jakiś czas temu :) – qdot

+0

Zrobiłem trochę więcej badań, podobno Samsung jest prawdziwym pedantem na ten temat, a mój sprzęt testowy to wszystko Samsung ... – xbakesx

3

Z poziomu interfejsu API 11 dodano SurfaceTexture. Dzięki temu SurfaceView nie jest już potrzebny. Testowałem poniższy kod z moim Samsung Galaxy S3 Neo.

mCamera = Camera.open(); 
try { 
    mCamera.setPreviewTexture(new SurfaceTexture(10)); 
} catch (IOException e1) { 
    Log.e(Version.APP_ID, e1.getMessage()); 
} 

Parameters params = mCamera.getParameters(); 
params.setPreviewSize(640, 480); 
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
params.setPictureFormat(ImageFormat.JPEG); 
mCamera.setParameters(params); 
mCamera.startPreview(); 
mCamera.takePicture(null, null, null, new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     Log.i(Version.APP_ID, "picture-taken"); 
    } 
}); 
Powiązane problemy