سؤال

جربت عدة أشياء لمحاولة الحصول على معاينة الكاميرا لتظهر في صورة على أ SurfaceView. لا شيء يعمل. أنا أختبر على الروبوت الذي يحتوي على 2.0.1. حاولت:

1) إجبار التصميم على أن يكون صورة: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2) باستخدام

Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.setRotation(90);
camera.setParameters(parameters);

هل هناك شيء آخر يمكنني تجربته؟ إذا كان هذا خطأ في Android أو الهاتف ، فكيف يمكنني التأكد من أن هذا هو الحال حتى يكون لدي دليل على إبلاغ العميل؟

شكرا ، براسانا

لا يوجد حل صحيح

نصائح أخرى

اعتبارًا من API LVL 8 ، هذا متاح:

Public Final Void setDisplayorientation (DETS)

أي مع بورتت في البيان:

public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();
    mCamera.setDisplayOrientation(90);

لديّ حل عمل لوضع صورة يعمل في 2.1 (تم اختباره على الرغبة) ربما أقل.

يتم تعيين اتجاه شاشة النشاط على الصورة. (Android: Screenorientation = "Portrait")

معلمات الكاميرا:

camera.parameters p = mcamera.getParameters () ؛

 p.set("jpeg-quality", 100);
 p.set("orientation", "landscape");
 p.set("rotation", 90);
 p.setPictureFormat(PixelFormat.JPEG);
 p.setPreviewSize(h, w);// here w h are reversed
 mCamera.setParameters(p);

وستكون الصورة صورة.

يجب أن يكون حامل السطح الذي تستخدمه للكاميرا متوافقًا مع دقة شاشة معاينة الهاتف المعتادة.

مضحك على الرغبة 2.2 لا يعمل ... هنا هو الإصلاح:

   At surfaceCreated(..) or when you have this line
camera = Camera.open();
       add
camera.setDisplayOrientation(90);//only 2.2>

Camera.Parameters p = camera.getParameters();
    p.set("jpeg-quality", 100);
p.setRotation(90);
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(h, w);
camera.setParameters(p);

يمكنك تجربة هذا (جيد لـ 2.2 أو أدناه). هنا أقوم بتدوير الصورة قبل حفظها في بطاقة SD. ولكن فقط لوضع الصورة. إذا اضطررت إلى صنعه لكلا الوضعين ، فيجب عليك التحقق من اتجاه الكاميرا ووضع بعض الفحص قبل التقاط الصورة.

PictureCallback jpegCallback = new PictureCallback() {
   public void onPictureTaken(byte[] data, Camera camera) {
      FileOutputStream outStream = null;
      try {
        imageFilePath = getFilename();
        InputStream is = new ByteArrayInputStream(data);
        Bitmap bmp = BitmapFactory.decodeStream(is);
        // Getting width & height of the given image.
        if (bmp != null){
           int w = bmp.getWidth();
           int h = bmp.getHeight();
           // Setting post rotate to 90
           Matrix mtx = new Matrix();
           mtx.postRotate(90);
           // Rotating Bitmap
           Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream);
           byte[] byteArray = stream.toByteArray(); 
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(byteArray);
           outStream.close();
        } else {
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(data);
           outStream.close();           
        }       

        preview.camera.startPreview();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    }
  }
};

لا توجد طريقة للقيام بذلك على العديد من الأجهزة الحالية ، بما في ذلك G1 و Droid. ألق نظرة على تقرير الأخطاء ذات الصلة هنا:

انظر أيضًا تعليقًا من أحد مهندسي Android (Dave) هنا:

الرابط الروماني أعطى لخيط القضية لديه حل عملي الذي أستخدمه الآن.

ابحث عنه هنا:http://code.google.com/p/android/issues/detail؟id=1193#c26

ليست هناك حاجة إلى تعيين أي معلمات للاتجاه حتى تحتاج إلى القيام بذلك بشكل صريح. بشكل افتراضي ، يدعم هذا المرفق. في حالتي ، لديّ نشاط وفوق هذا النشاط لدي عرض للكاميرا ، لذلك لم أقم بتعيين أي اتجاه لخصائص الكاميرا ، بدلاً من ذلك للنشاط ، قمت بتعيين الاتجاه كصورة في ملف البيان. الآن يبدو التطبيق ويعمل بشكل جيد. قد تكون مفيدة لبعض ..

شكرًا.

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