Camera.takePicture,帮我拍照并加速后保存

时间:2013-06-27 15:02:53

标签: android android-intent

我会在加入后保存一张照片。这是我的代码:

if (acc_tot > 10.5) {
            camera = Camera.open();
            camera.takePicture(null, null, jpegCallback);

            camera.release();
    }
.....
....
PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera _camera) {


        }

    };  
你能帮帮我吗?我可以在我的SD卡中保存照片吗?

2 个答案:

答案 0 :(得分:0)

您可以轻松完成此操作。请查看thisthis。  您可以轻松地将图像保存到SD卡。这样做

首先将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />添加到清单中。 现在就像这样实施PictureCallback

PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera _camera) {

String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images");    
    myDir.mkdirs();

    String fname = "ImageName" +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
           file.createNewFile();
           FileOutputStream out = new FileOutputStream(file);
           bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
           out.write(data,0,dat.length);
           out.flush();
           out.close();

    } catch (Exception e) {
           e.printStackTrace();
    }

        }

    };  

希望这有帮助

答案 1 :(得分:0)

尝试拍照后,您正在释放相机。这根本无法保证 - 相机可能会关闭,永远不会给你你的照片。如果您在收到照片后不想打开相机,请尽快在照片回调中调用camera.release(),而不是之前。

此外,您不会启动相机预览,也不会为预览帧设置目的地。在拍照之前,这两个都是必需的。如果您的目标是Android&gt; = 3.0,则以下最小代码应该有效:

 import android.graphics.SurfaceTexture;
 ...
 private mSurfaceTexture = new SurfaceTexture(0);
 ...
 if (acc_tot > 10.5) {
        camera = Camera.open();
        camera.setPreviewTexture(mSurfaceTexture);
        camera.startPreview();
        camera.takePicture(null, null, jpegCallback);
 }

然而,如果你每次想要一张照片(约1秒钟)的话,相机启动需要很长时间。

为了获得良好的性能,您需要打开相机并在加速跟踪开始时开始预览,以便您可以在需要时以最小延迟调用takePicture。一旦您暂停活动或停止加速跟踪,请释放相机设备。