0

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

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 卡中吗?

4

2 回答 2

0

你可以很容易地做到这一点。看看这个这个。您可以轻松地将图像保存到 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();
    }

        }

    };  

希望这可以帮助

于 2013-06-27T15:35:19.617 回答
0

您在尝试拍照后立即释放相机。这根本不能保证有效 - 相机可能只是关闭并且永远不会给你照片。如果您不想在收到图片后打开相机,请尽早在图片回调中调用 camera.release(),而不是之前。

此外,您无需启动相机预览,也无需为预览帧设置目标。在您拍照之前,这两项都是必需的。如果您的目标是 Android >= 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。然后在您暂停活动或停止加速跟踪后释放相机设备。

于 2013-06-27T17:47:13.300 回答