【发布时间】:2012-08-10 23:38:56
【问题描述】:
场景:
我需要尽快拍照并将其保存到 SD 卡中。如果我能在大约 0.2 秒内完成拍照和保存,那就太棒了。
到目前为止我做了什么:
像往常一样,我创建了一个 SurfaceView 来处理相机预览并初始化相机对象。图像的质量不需要非常高,这就是为什么我没有使用尽可能大的分辨率,也不需要自动对焦。 我这样设置参数:
Parameters parameters = camera.getParameters();
parameters.set("jpeg-quality", 70);
parameters.setPictureFormat(ImageFormat.JPEG);
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
Size size = sizes.get(Integer.valueOf((sizes.size()-1)/2)); //choose a medium resolution
parameters.setPictureSize(size.width, size.height);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
List<Size> sizes2 = parameters.getSupportedPreviewSizes();
Size size2 = sizes.get(0);
parameters.setPreviewSize(size2.width, size2.height);
camera.setPreviewDisplay(holder);
camera.startPreview();
我将图像保存到 SD 卡非常简单:
PictureCallback handlePictureStorage = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));
outStream.write(data);
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
};
在我的 Galaxy Nexus 上做了一些测试后,结果如下:
- 将图片大小设置为:wigth=1600 height=1200
- Jpeg 质量:70,图片格式 JPEG
- 火灾拍照时间:00:13:23.603
- 开始在 SD 卡上保存图片:00:13:23.956
- 已完成将图片保存到 SD 卡的时间:00:13:23.990
这几乎是 0.4 秒。 有没有办法进一步调整相机参数以获得更快的速度?分辨率还可以,画质也还行。我知道市场上有每秒 30 张图片的应用程序,但我认为他们使用缓冲来达到这个速度。但是,您可能会看到,拍照而不是将其保存到卡中浪费了最大的时间。如果我能再调整一下就好了。
【问题讨论】:
-
这与您正在解决的问题相切,但 API makes no guarantee of the ordering of
getSupportedPictureSizes(),因此选择中间值不会在所有设备上都能满足您的需求。 -
为时已晚,但您的
size2仍在使用sizes而不是sizes2进行预览。而且,setParameters()在此之前已经被调用过。
标签: android android-camera surfaceview