我会在加入后保存一张照片。这是我的代码:
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卡中保存照片吗?
答案 0 :(得分:0)
您可以轻松完成此操作。请查看this和this。 您可以轻松地将图像保存到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。一旦您暂停活动或停止加速跟踪,请释放相机设备。