2013-03-04 31 views
0

我正在处理原始相机图像,但需要在捕获图像后重新开始预览。当我在takePicture之后调用startPreview()时,android会挂起,因为相机会一直使用。我一直等到原始图像写入磁盘后,但相机仍在使用中,所以开始预览仍会挂起系统。任何方式来确定相机是否空闲?

camera.takePicture(null, null, null); 
(test needed here){ 
camera.startPreview();  
} 

将开始预览放在rawcallback挂起android。

当调用takePicture时,jpegCallback在相机完成后发生,因此可以安全地启动预览,但是这也会创建一个.jpg。

问题出在takePicture之后,有什么方法可以确定相机何时闲置? (除了jpegCallback?)。

我已经找到了解决这个问题的方法,比如在一个定时器上启动预览,但是仍然想知道是否有任何方法来确定摄像机的实际状态,以及如何测试它何时保存以重新启动预习。

+0

知道你的具体目标在这里将有助于实际上帮助你实现你的目标,而不是只回答你陈述的问题确定摄像机的'状态'是否可以被知道 - 直到JPEG回调才会被占用 – 2013-03-04 19:37:16

+0

该应用程序是一个基于点的条形码应用程序,其中点的大小非常小,出于我的目的,最有效的图像格式是直接从相机芯片原始文件。另一个考虑是采取全分辨率.jpg和调用BitmapFactory.decodeByteArray得到一个位图导致内存问题。该API似乎表明,jpegcallback是可选的,所以看起来有些方法不需要它。然后,api再次表示rawimagecallback会给出一个原始图像,非常适合文档。 – 2013-03-04 22:53:29

+0

哦,我明白了..所以你想要全分辨率的原始回调,由于小点的小尺寸?您是否试图立即重新开始预览,因为您想要某种无缝图像捕捉,而不会中断用户体验或暂停相机预览? – 2013-03-05 00:44:06

回答

0

在调用takePicture() function之后,您必须等到JPEG回调已返回,摄像机才能再次使用。没有办法监控其状态。该文件明确规定以下内容:

调用此方法后,你一定不能调用startPreview()或采取 另一张照片,直到JPEG回调返回。

如果你需要抓帧(即图像)无需停止和重新启动相机预览的一些快捷方式,可以实现PreviewCallback接口,只会让您抓住预览画面,而完全不停止预览。只要记住,你将需要转换这些从YUV格式(这并不难,使用Android的YUVImage class

+0

我不打电话给jpegcallback,所以很难等到它结束。我开始猜测,如果或者如果不调用jpegcallback,就会创建.jpg,所以调用jpegcallback来重新开始预览可能不会增加任何开销。原始拜尔图像是相机看到的,其他一切都是后期处理。 – 2013-03-04 23:32:51

+0

是的。不要认为jpegcallback会增加任何开销。 – 2013-03-05 00:49:16

相关问题