Comment prendre des photos de l'appareil photo sans aperçu lorsque mon application démarre?
Maintenant tout ce que je veux est une application qui prend juste l'image de la caméra lors du lancement. Pas de présentation, pas de prévisualisation de la caméra...rien, juste une simple icône de l'application pour lancer l'application. Une fois lancé, l'appareil doit prendre une photo.
Voici l'aperçu de l'image, qui je ne veux pas apparaître dans mon application. Je veux juste eanble mon appli pour cliquez sur l'image bouton encerclé dans l'image ici:
Une fois que la photo est prise alors que je dois l'enregistrer dans ma galerie photo.
Quelqu'un peut-il me guider? Grâce
Voici un code que j'ai essayé sur émulateur et de l'appareil.
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class Main extends Activity implements SurfaceHolder.Callback{
private Camera camera;
private ImageButton cameraClick;
private SurfaceHolder mHolder;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
mHolder = surfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
cameraClick = (ImageButton) findViewById(R.id.cameraClick);
cameraClick.setOnClickListener( new OnClickListener() {
public void onClick(View v)
{
camera.takePicture(shutterCallback, rawCallback,jpegCallback);
}
});
}
//Handles when shutter open
ShutterCallback shutterCallback = new ShutterCallback()
{
public void onShutter()
{
}
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera)
{
}
};
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera)
{
//we do something using return byte[] of taken image.
}
};
@Override
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height)
{
//Set camera preview size,orientation,rotation using parameters
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
}
catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
camera.stopPreview();
camera.release();
camera = null;
}
}
Maintenant, je suis capable d'entendre la photo, cliquez sur le bouton cliquez sur à la fois sur l'émulateur et l'appareil. Maintenant, je veux enregistrer l'image en tant que bien. Aucun indice?
source d'informationauteur Muhammad Maqsoodur Rehman | 2013-12-19
Vous devez vous connecter pour publier un commentaire.
Utilisez code ci-dessous. Ses Testé et a Travaillé pour moi. Toutes les questions n'hésitez pas à mettre des commentaires.
Que de API-Niveau 11 le SurfaceTexture a été ajouté. Avec une SurfaceView n'est plus nécessaire. J'ai testé le code suivant avec mon Samsung Galaxy S3 Neo.
L'aperçu de la caméra est juste un type spécial de Vue de la mise en page, donc si vous ne voulez pas l'afficher, mais tout de même utiliser votre code existant sans beaucoup de modifications, il y a quelques trucs que vous pouvez faire.
Par exemple, dans votre fichier de mise en page où vous êtes l'ajout de la prévisualisation de la caméra SurfaceView, vous pouvez simplement ajouter un autre point de vue sur le dessus de celui-ci pour bloquer l'aperçu. De cette façon, vous serez toujours en mesure d'utiliser votre code existant sans modification de trop et l'aperçu de la caméra fonctionnera comme il l'a fait avant, mais vous aurez l'effet que vous êtes à la recherche pour ce qui est de ne pas montrer l'aperçu de la caméra.
J'ai essayé exactement ce dont vous avez besoin, avant et après beaucoup de recherches ont révélé que, pour une raison quelconque, vous devez avoir un aperçu commencé et même montrer que le contenu dans une SurfaceView pour être en mesure d'obtenir l'image, apparemment, le système de coulisses, les bouffées de chaleur ce qui est dans le tampon pour la SurfaceView rendu de l'aperçu, maintenant, ce que j'ai fait pour résoudre ce problème (à prendre la photo sans l'aperçu) c'était juste pour définir la SurfaceView dans ma mise en page à 1dp largeur et 1dp hauteur (avis il doit être 1dp, 0dp va provoquer un plantage).
Il certainement peut-être pas une très élégante façon de se débarrasser de la "preview" de l'Image, mais il a certainement fait le truc et m'a laissé de l'espace pour faire tout ce que j'avais à l'esprit.
Espère que cela aide...
Ce qui concerne
Pour ceux qui sont à la recherche pour faire la même chose, mais avec APPAREIL photo 2 APIvous pourriez vérifier ma réponse ici. Capture d'image, sans l'aperçu à l'aide de la caméra 2 API.