Pregunta

Me encontré con un problema con algo que probablemente solo estoy pasando por alto.

Quiero tomar una foto de la vista previa de la superficie de la cámara y guardarla en la sd_card . Esto funciona casi perfecto. Le asigné un nombre de archivo, pero no utiliza el filename .

Esto es lo que he estado tratando de hacer:

Button imagecapture = (Button) findViewById(R.id.imagecapture);
imagecapture.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        String filename = null;
        ImageCaptureCallback iccb = null;

        try {
            filename = timeStampFormat.format(new Date());
            ContentValues values = new ContentValues();
            values.put(Media.TITLE, filename);
            values.put(Media.DESCRIPTION, "Image capture by camera");

            Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
            iccb = new ImageCaptureCallback(getContentResolver().openOutputStream(uri));
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.e(getClass().getSimpleName(), ex.getMessage(), ex);
        }
        camera.takePicture(mShutterCallback, mPictureCallbackRaw, iccb);
        com.froogloid.android.gspot.Park.imageFileName = filename;
    }
});

No usará el nombre de archivo (es decir, la marca de hora / fecha que le pido).

¿Fue útil?

Solución

Esto se resolvió implementando PictureCallback a través de una clase ImageCaptureCallback y anulando onPictureTaken donde el archivo se estaba escribiendo a través de una secuencia de salida de archivo. Todo lo que tenía que hacer era cambiar la secuencia de salida del archivo al nombre de archivo que desea.

Otros consejos

¿no guarda la imagen? en mi aplicación este código guarda la imagen, tal vez usas variable '' filaname '' obtener una imagen de sdcard? usar la imagen de la tarjeta sd es mejor guardar en variable, para examinadores, "fileUri" valor de uri.toString, finalice la obtención del archivo sdcard con uri Uri.parse (fileUri) ..

Espero que esto ayude / Probablemente no sea la mejor manera de hacerlo, pero funcionó. Aquí tienes:
Esta es la devolución de llamada de imagen de captura de cámara .

public class ImageCaptureCallback implements PictureCallback {

    private OutputStream filoutputStream;
    public ImageCaptureCallback(OutputStream filoutputStream) {
        this.filoutputStream = filoutputStream;
    }

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        try {
            Log.v(getClass().getSimpleName(), "onPictureTaken=" + data + " length = " + data.length);
            FileOutputStream buf = new FileOutputStream("/sdcard/dcim/Camera/" + CameraActivity.filename + ".jpg");
            buf.write(data);
            buf.flush();
            buf.close();
            // filoutputStream.write(data);
            filoutputStream.flush();
            filoutputStream.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top