¿Es posible capturar una imagen sin mostrar la vista previa de la cámara ?, tengo un requerimiento de que debería ser capaz de capturar la imagen desde un hilo o desde un servicio, sin perturbar la aplicación en primer plano, donde no quiero mostrar la vista previa de la cámara, pero aún así quiero capturar la imagen en segundo plano y almacenarla en el dispositivocómo tomar la captura de la cámara sin una vista previa de un servicio o hilo?
Respuesta
Pruebe este código. Hará clic en una imagen cuando comience la actividad. Tiene una vista previa, pero el tamaño de vista previa se establece en 0 por 0 dp.
package fortyonepost.com.pwop;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.ImageView;
public class TakePicture extends Activity implements SurfaceHolder.Callback
{
//a variable to store a reference to the Image View at the main.xml file
private ImageView iv_image;
//a variable to store a reference to the Surface View at the main.xml file
private SurfaceView sv;
//a bitmap to display the captured image
private Bitmap bmp;
//Camera variables
//a surface holder
private SurfaceHolder sHolder;
//a variable to control the camera
private Camera mCamera;
//the camera parameters
private Parameters parameters;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//get the Image View at the main.xml file
iv_image = (ImageView) findViewById(R.id.imageView);
//get the Surface View at the main.xml file
sv = (SurfaceView) findViewById(R.id.surfaceView);
//Get a surface
sHolder = sv.getHolder();
//add the callback interface methods defined below as the Surface View callbacks
sHolder.addCallback(this);
//tells Android that this surface will have its data constantly replaced
sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
{
//get camera parameters
parameters = mCamera.getParameters();
//set camera parameters
mCamera.setParameters(parameters);
mCamera.startPreview();
//sets what code should be executed after the picture is taken
Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
//decode the data obtained by the camera into a Bitmap
bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
//set the iv_image
iv_image.setImageBitmap(bmp);
}
};
mCamera.takePicture(null, null, mCall);
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// The Surface has been created, acquire the camera and tell it where
// to draw the preview.
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
//stop the preview
mCamera.stopPreview();
//release the camera
mCamera.release();
//unbind the camera from this object
mCamera = null;
}
}
referencia: http://www.41post.com/3794/programming/android-take-a-picture-without-displaying-a-preview
Esto está en el camino correcto, pero está utilizando una 'Actividad' en lugar de un hilo de fondo o servicio. – Sam
¡Esto toma una foto, pero se gira 90 grados! Para verificar, hice que la superficie fuera de 200x200 píxeles en lugar de 0 de ancho. La vista de superficie también muestra la imagen de lado. – Raja
se puede utilizar un maniquí surfaceholder.callback
private SurfaceHolder.Callback dummySurfaceCallback = new SurfaceHolder.Callback()
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// do nothing
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
// do nothing
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// do nothing
}
};
y aplicarlo a un surfaceholder (previewHolder)
preview = (SurfaceView) findViewById(R.id.preview);
previewHolder = preview.getHolder();
previewHolder.addCallback(dummySurfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
y luego usar el previewholder en la configuración de la vista previa en mediarecoreder.
mediaRecorder.setPreviewDisplay(previewHolder.getSurface());
este método tendrá una vista previa de la pantalla en negro. esto funciona para mí, espero que esto ayude ...
no pude ser aceptado para trabajar en mi actividad principal (funcionó como una actividad separada cuando cambié la vista de superficie a 1 ppp por 1 ppp, pero después de tomar foto, mis vistas dinámicas desaparecerían).
para tomar fotos sin previsualización en mi actividad principal, he usado el código de Android - Take picture without preview (sigue la versión modificada).
...
private SurfaceView sv;
Camera myCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
...
private void takePhoto() {
Camera.Parameters parameters = myCamera.getParameters();
// myCamera.setDisplayOrientation(180);
// parameters.setPictureFormat(ImageFormat.JPEG);
// parameters.setPictureFormat(PixelFormat.JPEG);
myCamera.setParameters(parameters);
SurfaceView mview = sv;
try {
myCamera.setPreviewDisplay(mview.getHolder());
myCamera.startPreview();
myCamera.takePicture(null, null, photoCallback);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
saveMyPhotoToParse(data);
// Log.i(DEBUG_TAG,"image pseudo saved");
}
};
excepción de puntero nulo en esta línea myCamera.setPreviewDisplay (mview.getHolder()); –
Hacer la vista previa dentro de otro diseño lineal y cambiar el alfa valores 255 completa transparente llena 0 opaca
cameraPreview_holderLL.setAlpha (255); // habilitar la vista previa
cameraPreview_holderLL.setAlpha (0); deshabilitar vista previa
<LinearLayout
android:id="@+id/camera_preview_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
- 1. Tomar foto sin vista previa Android
- 2. ¿Cómo mejorar la vista previa de la cámara?
- 3. Cambio de tamaño de la vista previa de la cámara
- 4. vista de superposición de cámara, solo para una vista previa?
- 5. ColorEfecto no visible en la vista previa de la cámara
- 6. SurfaceView con vista previa de la cámara no se destruye
- 7. Android cámara vista previa tutorial
- 8. SurfaceView invisible para vista previa de la cámara
- 9. UIImagePickerController sin superposición en la vista previa
- 10. ¿Cómo tomar la captura de pantalla programáticamente?
- 11. Capture la imagen de la cámara frontal y guárdela en la tarjeta SD sin vista previa
- 12. iPhone: superposición de vista previa de la cámara
- 13. en android, reproduzca la vista previa de la cámara en una vista
- 14. cámara androide de vista previa Rotación
- 15. Cómo recuperar la imagen de la cámara sin usar la aplicación de la cámara (a través de un servicio)
- 16. Cómo usar la cámara para tomar fotos en segundo plano ¿Servicio en Android?
- 17. Vista previa de la cámara Android se ve extraño
- 18. La capa de vista previa de la cámara AV Foundation se acerca, cómo alejarse?
- 19. Sin iPhone, ¿cómo tomar una captura de pantalla con XCode?
- 20. Captura de pantalla capturada en un teléfono Android cuando se reproduce una vista previa de video y cámara
- 21. ¿Cómo recuperar la vista previa de la cámara de la suspensión?
- 22. Android dibujar en cámara vista previa
- 23. Obtener una representación de imagen de la vista previa de la cámara en UIImagePickerController
- 24. Cómo grabar el video usando la vista previa de la cámara en TextureView
- 25. La vista previa de la cámara UIImagePickerController es retratos en la aplicación horizontal
- 26. ¿Ejemplos de captura previa?
- 27. Android: ¿cómo mostrar la vista previa de la cámara con devolución de llamada?
- 28. Cómo dibujar una ventana de "vista previa" de captura de pantalla?
- 29. La cámara Android se congela después de tomar una foto
- 30. Imprimir ServerReport sin vista previa
¿Has visto estas otras preguntas? http://stackoverflow.com/questions/2386025/android-camera-without-preview http://stackoverflow.com/questions/7398897/how-to-use-camera-to-take-picture-in-a-background -service-on-android –
cualquier programa de ejemplo para dar uso de cámara frontal sin vista previa y guardar tarjeta sd – city0666