2011-04-26 26 views
8

Sto sviluppando su Android, voglio fare qualcosa con la fotocamera (i valori dei pixel di processo), ma solo in background, è possibile farlo senza vista di superficie? basta usare un buffer per leggere i valori dei pixel e fare l'elaborazione. grazie per tutti mi può aiutareUsa fotocamera Android senza superficie Visualizza

risposta

4

Ho cercato una risposta a questo per un po '. L'ho trovato lì, copiato qui per comodità.

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

Fondamentalmente, facciamo solo creare un SurfaceView fittizio (funziona anche all'interno di un Servizio), e utilizzarlo per funzioni della fotocamera.

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

Quali dispositivi funziona? Tutti i dispositivi che ho provato che utilizzano questo codice risultano in "E/CameraHAL (132): Errore durante la configurazione della rotazione" – xbakesx

+0

Testato su: Galaxy i5800 (2.2), HTC Wildfire (2.1?) - era qualche tempo fa :) – qdot

+0

Ho fatto qualche ricerca in più, a quanto pare Samsung è un vero stickler su questo, e la mia apparecchiatura di prova è tutta Samsung ... – xbakesx

3

Come di API-Livello 11 il SurfaceTexture è stato aggiunto. Con esso un SurfaceView non è più necessario. Ho provato il seguente codice con il mio 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"); 
    } 
}); 
Problemi correlati