سؤال

يعرض تطبيقنا معاينة الكاميرا ويبدو أنه يعمل بشكل جيد على جميع الهواتف باستثناء Droid Motorola حيث نحصل على استثناء وقت تشغيل عند ضبط معلمات الكاميرا:

    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();

}

هل يعرف أي شخص ما هو الخطأ في كيفية وضع المعلمات التي ستسبب الاستثناء الموجود على Droid Motorola؟

هل كانت مفيدة؟

المحلول

يمكنني أن أقول لك مشكلتك مع أحد السطرين التاليين:

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

أعلم أن هذا، لأن بقية هذا الرمز هو ما أقوم به في بعض عينات الكاميرا في كتابي، وقد تم اختبارها على الروبوت.

قد ترغب في استخدام getSupportedPreviewFormats() و getSupportedPreviewFrameRates() على كائن Camera.Parameters، لمعرفة ما إذا كان الجهاز المعني يدعم التنسيق ومعدل الإطار الذي تبحث عنه. لاحظ أن هذه الطرق جديدة على نظام Android 2.0، لذلك سيعملون على الروبوت / المعلم (، ويفترض، Nexus One)، ولكن لا شيء آخر في وقت كتابة هذه الكتابة. إذا كنت تستهدف إصدارات API القديمة التي تعمل بنظام Android، فستحتاج إلى استخدام التفكير أو بعض الحيل النصية للحصول على هذه الأساليب للعمل على Android 2.0 ويتم تخطيها على الإصدارات الأقدم.

نصائح أخرى

يجب عليك التحقق من التنسيقات المعاينة المتاحة للتأكد من أنه يمكنك تشغيل أكبر عدد ممكن من الأجهزة.

يبدو أن الروبوت يدعم pixformat.ycbcr_422_i pixelformat.ycbcr_420_sp

يمكنك استخدام الأسلوب التالي للحصول على قائمة بالتنسيقات المتاحة.getsupportedpreviewformats ()

صيغ بكسل

شيء آخر قد ترغب في التحقيق فيه:

أعاني من هذه المشكلة للأجهزة التي تعمل على تشغيل Motoblur وتحديثها إلى 2.3 (وخاصة Droid2 و DroidX و Atrix مع Verizon).

كانت معلمات الكاميرا على ما يرام، ولكن في التصميم / 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"
/>

حسنا، يبدو أنه شفاف ل Motoblur على Android 2.3 ليس هذا ...

إزالة

android:background="@color/transparent"

من عدسة الكاميرا حل مشكلتي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top