7

我遇到了一个我可能只是忽略的问题。

我想从相机的表面预览中拍一张照片,并将其保存到sd_card. 这几乎是完美的。我给它分配了一个文件名,但它不使用filename.

这就是我一直在尝试做的事情:

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

它不会使用文件名(即我要求它使用的时间/日期戳。)

4

3 回答 3

6

这是通过通过 ImageCaptureCallback 类实现 PictureCallback 并通过文件输出流覆盖正在写入文件的 onPictureTaken 来解决的。您所要做的就是将文件输出流更改为您想要的文件名。

于 2009-01-23T13:43:55.100 回答
0

它不保存图像?在我的应用程序中,此代码保存图像,也许您使用变量“filaname”从 sdcard 获取图像?使用来自 sdcard 的图像最好保存在变量中,例如,uri.toString 的“fileUri”值,最后从 sdcard 文件中获取 uri Uri.parse(fileUri)..

于 2009-01-26T13:01:10.653 回答
0

希望这会有所帮助/可能不是最好的方法,但它确实有效。给你:
这是相机捕捉图像回调

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();
        }
    }
}
于 2009-02-25T21:25:57.850 回答