1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| btnClic = (ImageButton) findViewById(R.id.Clic);
surfaceCamera = (SurfaceView) findViewById(R.id.SurfaceCamera);
btnClic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (camera != null) {
MediaPlayer.create(getApplicationContext(), R.raw.click_apn).start();
SavePicture();
}
}
});
surfaceCamera.getHolder().addCallback(this); // Attache les retours du holder à l'activité
}
public void surfaceCreated(SurfaceHolder holder) { // Prend le contrôle de la caméra
if (camera == null)
camera = Camera.open();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (isPreview) { // Si le mode preview est lancé alors on l'arrête
camera.stopPreview();
}
parameters = camera.getParameters(); // Récupére les paramètres de la caméra
parameters.setPreviewSize(width, height); // Change la taille
camera.setParameters(parameters); // Applique les nouveaux paramètres
try { // Attache la prévisualisation de la caméra au holder de la surface
camera.setPreviewDisplay(surfaceCamera.getHolder());
} catch (IOException e) {
}
camera.startPreview(); // Lançe la previsualisation
isPreview = true;
}
public void surfaceDestroyed(SurfaceHolder holder) { // Arrête la caméra et rend la main
if (camera != null) {
camera.stopPreview();
isPreview = false;
camera.release();
}
}
@Override
public void onResume() { // Retour sur l'application
super.onResume();
camera = Camera.open();
}
@Override
public void onPause() { //Mise en pause de l'application
super.onPause();
if (camera != null) {
camera.release();
camera = null;
}
sensorManager.unregisterListener(this);
}
private void SavePicture() {
try { // Metadata pour la photo
parameters.setGpsAltitude(altImg);
parameters.setGpsLatitude(latImg);
parameters.setGpsLongitude(lonImg);
parameters.getHorizontalViewAngle();
parameters.setGpsProcessingMethod(String.format("Cap de prise de vue %.0f °", capCor));
camera.setParameters(parameters); // Applique les nouveaux paramètres
ContentValues values = new ContentValues();
values.put(Media.TITLE, String.format("Cap de prise de vue : %.0f °", capCor));
values.put(Media.DISPLAY_NAME, nomImg);
values.put(Media.DESCRIPTION, "Image géoréférencée");
values.put(Media.DATE_TAKEN, new Date().getTime());
values.put(Media.LATITUDE, latImg);
values.put(Media.LONGITUDE, lonImg);
values.put(Media.MIME_TYPE, "image/jpeg");
// Uri taken = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); // Support de stockage
// FileOutputStream stream = (FileOutputStream) getContentResolver().openOutputStream(taken);
camera.takePicture(null, pictureCallback, pictureCallback); // Ouverture du flux pour la sauvegarde
} catch (Exception e) {
}
}
private Camera.PictureCallback pictureCallback = new Camera.PictureCallback() { //Callback pour la prise de photo
public void onPictureTaken(byte[] data, Camera camera) {
if (data != null) { // Enregistrement de l'image
try {
FileOutputStream fOut = new FileOutputStream(repImg + "/" + nomImg + String.format("_Cap%03.0f", capCor) + ".jpg");
fOut.write(data);
fOut.flush();
fOut.close();
} catch (Exception e) {
}
camera.startPreview(); // Redémarre la prévisualisation
}
}
}; |
Partager