摩托罗拉Droid上的相机预览

3
我们的应用程序显示相机预览,在所有手机上似乎都正常工作,但在Motorola Droid上设置相机参数时会出现运行时异常:
    java.lang.RuntimeException: setParameters failed
   at android.hardware.Camera.native_setParameters(Native Method)
   at android.hardware.Camera.setParameters(Camera.java:611)
   at com.highwaynorth.andrometer.CameraPreviewSurfaceView.surfaceChanged(CameraPreviewSurfaceView.java:57)
   at android.view.SurfaceView.updateWindow(SurfaceView.java:460)
   at android.view.SurfaceView.dispatchDraw(SurfaceView.java:287)
   at android.view.ViewGroup.drawChild(ViewGroup.java:1525)

这里是surfaceChanged()的代码,大部分是从APIDemos中获取的。

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
   // Now that the size is known, set up the camera parameters and begin
   // the preview.
   Camera.Parameters parameters = mCamera.getParameters();
   parameters.setPreviewSize(w, h);
   parameters.setPictureFormat(PixelFormat.JPEG);
   parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
   parameters.setPreviewFrameRate(1);
   mCamera.setParameters(parameters);
   mCamera.startPreview();

有人知道我们设置参数时出了什么问题,导致 Motorola Droid 出现异常吗?

3个回答

2
我可以告诉你,你的问题可能与以下两行代码中的其中一行有关:

我可以告诉你,你的问题可能与以下两行代码中的其中一行有关:

parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
parameters.setPreviewFrameRate(1);

我知道这一点,因为那段代码的其余部分只是我在书中的一些相机示例中所做的内容,并且它们已经在DROID上进行了测试。
您可能希望在Camera.Parameters对象上使用getSupportedPreviewFormats()和getSupportedPreviewFrameRates(),以查看设备是否支持您需要的格式和帧速率。请注意,这些方法是Android 2.0中新增的,因此它们将在DROID/Milestone(以及可能的Nexus One)上运行,在撰写本文时不适用于其他设备。如果您针对较旧的Android API版本,则需要使用反射或某些类加载技巧来使这些方法在Android 2.0上工作并在较旧的版本上被跳过。

你是对的。我们已经将其更改为与APIDemos完全匹配,并删除了setPictureFormat(),setPreviewFormat()和setPreviewFrameRate()的调用,现在它在Droid上运行良好。感谢您详细的回答! - Bryan Bedard

0

你可能想要调查的另一件事:

我在运行 Motoblur 并更新到 2.3 的设备上遇到了这个问题(特别是 Verizon 的 Droid2、DroidX 和 Atrix)。

相机参数没问题,但在 layout/capture.xml 中,ViewfinderView 的背景设置为透明:

<com.google.zxing.client.android.ViewfinderView
   android:id="@+id/viewfinder_view" 
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:background="@color/transparent"
/>

嗯,看起来在Android 2.3上,Motoblur的透明度并不是那么透明...

移除中

android:background="@color/transparent"

从ViewFinder解决了我的问题。


0

您应该检查可用的预览格式,以确保您可以在尽可能多的设备上运行。

看起来DROID支持 PixelFormat.YCbCr_422_I PixelFormat.YCbCr_420_SP

您可以使用以下方法获取可用格式列表。 getSupportedPreviewFormats()

像素格式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接