Dónde colocar el autofoco en la cámara de la clase android
Estoy tratando de usar autofoucs no tengo ni idea de dónde colocar autofoco nadie tiene una idea de cómo implementar autofocus?
———- clase de vista previa ———-
- API de cámara no funciona en KITKAT
- Camera.open () devuelve null
- Android: toma fotos sin interfaz de usuario
- Rotar una superficie de la cámaraVer a retrato
- Varias cámaras en libgdx (probablemente similar en otros marcos)
package com.marakana; import java.io.IOException; import android.content.Context; import android.hardware.Camera; import android.hardware.Camera.PreviewCallback; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; class Preview extends SurfaceView implements SurfaceHolder.Callback { // <1> private static final String TAG = "Preview"; SurfaceHolder mHolder; // <2> public Camera camera; // <3> Preview(Context context) { super(context); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); // <4> mHolder.addCallback(this); // <5> mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // <6> } // Called once the holder is ready public void surfaceCreated(SurfaceHolder holder) { // <7> // The Surface has been created, acquire the camera and tell it where // to draw. camera = Camera.open(); // <8> try { camera.setPreviewDisplay(holder); // <9> camera.setPreviewCallback(new PreviewCallback() { // <10> // Called for each frame previewed public void onPreviewFrame(byte[] data, Camera camera) { // <11> Log.d(TAG, "onPreviewFrame called at: " + System.currentTimeMillis()); Preview.this.invalidate(); // <12> } }); } catch (IOException e) { // <13> e.printStackTrace(); } } // Called when the holder is destroyed public void surfaceDestroyed(SurfaceHolder holder) { // <14> camera.stopPreview(); camera = null; } // Called when holder has changed public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // <15> camera.startPreview(); } }
—————– actividad de la cámara ————————
preview = new Preview(this); // <3> ((FrameLayout) findViewById(R.id.preview)).addView(preview); // <4> buttonClick = (Button) findViewById(R.id.buttonClick); buttonClick.setOnClickListener(new OnClickListener() { public void onClick(View v) { // <5> preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); } }); // Handles data for jpeg picture PictureCallback jpegCallback = new PictureCallback() { // <8> public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream outStream = null; try { // Write to SD Card outStream = new FileOutputStream(imgPath); // <9> outStream.write(data); outStream.close(); intImg = new Intent(CameraActivity.this, DisplayImg.class); intImg.putExtra("imgPath",imgPath); startActivity(intImg); Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); } catch (FileNotFoundException e) { // <10> e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } Log.d(TAG, "onPictureTaken - jpeg"); } };
- Biblioteca Wrapper para Android API de cámara
- Error: No se puede obtener un lockedBuffer, el cliente muy probable intenta bloquear más de buffers maxImages
- Cambiar la cámara usando MediaDevices.getUserMedia () en webrtc
- nuevo android Camera2 Api en el nexo 7
- cámara de encargo del androide estirada surfaceview
- Cómo obtener imágenes de la imagen de vídeo en Android
- Cómo obtener cada frame de datos usando la API de camera2 en Android5.0 en tiempo real
- Imagen de ahorro de Android con cámara nativa
Si usted tiene autofocus fijado, usted debe hacer algo como esto:
camera.autoFocus(new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if(success){ camera.takePicture(shutterCallback, rawCallback, jpegCallback); } } });
Esa es la forma en que la cámara espera el autofoco;)
Desde API nivel 9 se puede implementar el enfoque automático de esta manera (automáticamente):
En el método surfaceChanged()
, realice los siguientes cambios:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Set camera properties first Camera.Parameters parameters = camera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); camera.setParameters(parameters); camera.startPreview(); camera.autoFocus(null); }
camera.autoFocus (new Camera.AutoFocusCallback {});
Puedes usarlo justo antes de tomar una foto.
preview.camera.autoFocus(null) // you can make optional callback once focus is achieved preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
En la superficie cambiada y antes de la vista previa, se puede utilizar el ajuste de enfoque automático que establecerá la distancia focal automáticamente, luego iniciar la vista previa y, a continuación, enfoque automático en lo que se muestra.
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Set camera properties first Camera.Parameters parameters = camera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); camera.setParameters(parameters); camera.startPreview(); camera.autoFocus(null); }
- Abrir un cuadro de diálogo con entrada de texto desde una vista en Android
- Icono de la aplicación para Android en Phonegap