无需预览即可从相机拍摄照片

我正在编写一个刚开机后启动的Android 1.5应用程序。 这是一项Service ,应该在没有预览的情况下拍照。 这个应用程序将记录某些地区的光密度。 我能够拍照,但照片是黑色的。

经过很长时间的研究,我发现了一个关于它的bug。 如果您未生成预览​​,则由于Android相机需要预览才能设置曝光和对焦,因此图像将变成黑色。 我创建了一个SurfaceView和监听器,但onSurfaceCreated()事件永远不会被触发。

我想原因是,表面并没有被直观地创造出来。 我还看到了一些使用MediaStore.CAPTURE_OR_SOMETHING静态调用相机的示例,它会拍摄一张照片并用两行代码保存在所需的文件夹中,但它也不会拍摄照片。

我需要使用IPC和bindService()来调用这个函数吗? 或者是否有其他方法来实现这一目标?


真正奇怪的是,android平台上的摄像头在给出有效预览面之前无法流式传输视频。 似乎该平台的架构师根本没有考虑第三方视频流应用程序。 即使对于增强现实情况,图片也可以作为某种视觉替换而不是实时相机流来呈现。

无论如何,只需将预览表面调整为1x1像素并将其放置在小部件的角落(可视元素)中即可。 请注意 - 调整预览面的大小,而不是相机的框架大小。

当然这种技巧不会消除消耗一些系统资源和电池的不需要的数据流(用于预览)。


我在Android Camera Docs中找到了这个答案。

注意:可以先使用MediaRecorder而不先创建相机预览,然后跳过此过程的前几个步骤。 但是,由于用户通常喜欢在开始录制之前看到预览,因此此处不讨论该过程。

您可以在上面的链接中找到一步一步的说明。 说明后,它会说明我上面提供的报价。


其实这是可能的,但你必须用假SurfaceView伪造预览

SurfaceView view = new SurfaceView(this);
c.setPreviewDisplay(view.getHolder());
c.startPreview();
c.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback);

在我的博客文章中找到更多细节。

更新9/21/11:显然这不适用于每个Android设备。

链接地址: http://www.djcxy.com/p/46505.html

上一篇: Taking picture from camera without preview

下一篇: Picture distorted with Camera and getOptimalPreviewSize