【问题标题】:Camera Preview on Motorola Droid摩托罗拉 Droid 上的相机预览
【发布时间】:2010-01-10 05:15:05
【问题描述】:

我们的应用程序显示一个摄像头预览,它似乎在所有手机上都可以正常工作,除了摩托罗拉 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 异常的参数时出了什么问题?

【问题讨论】:

    标签: android camera motorola motorola-droid


    【解决方案1】:

    我可以告诉您,您的问题在于以下两行之一:

    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 上正常工作。感谢您的详细解答!
    【解决方案2】:

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

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

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

    Pixel Formats

    【讨论】:

      【解决方案3】:

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

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

      Camera 参数没问题,但是在 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 解决了我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多