Pergunta

Eu corri em um problema com algo que eu estou provavelmente apenas com vista.

Eu quero tirar uma foto da pré-visualização da superfície da câmera, e guardá-lo para o sd_card. Isso funciona quase perfeito. Eu lhe é atribuído um nome de arquivo, mas não usa o filename.

Isto é o que eu tenho tentado fazer:

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;
    }
});

Ele não vai usar o nome do arquivo (ou seja, data / hora carimbo de eu pedir para ele.)

Foi útil?

Solução

Isto foi resolvido através da implementação de PictureCallback via uma classe ImageCaptureCallback e Substituindo o onPictureTaken onde o arquivo estava sendo escrito através de um fluxo de saída de arquivo. Tudo o que tinha a fazer era mudar o fluxo FileOutput ao nome do arquivo que você deseja.

Outras dicas

não salvar a imagem? em meu aplicativo este código guarda uma imagem, talvez você use variável "filaname" para obter imagem sdcard? imagem utilidade para sdcard é melhor guardar na variável, por examople, "fileUri" valor de uri.toString, get final de arquivo sdcard com uri URI.parse (fileUri) ..

Espero que isso ajude / Provavelmente não é a melhor maneira de ir sobre isso, mas funcionou. Aqui vai:
Esta é a imagem de captura câmera callback .

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top