无需预览即可从相机拍摄照片
我正在编写一个刚开机后启动的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