android - সফটওয - অ্যানড্রইড-ক্যামেরা পূর্বরূপ বিদায় হয়




বিউটি প্লাস ক্যামেরা ডাউনলোড (5)

আমি আমার কোডটিকে টিউটোরিয়াল-এ এক সাথে তুলনা করেছি এবং অবশেষে এটি আমার AndroidManifext.xml এ নিম্নলিখিত কোডটি ঢোকানো হয়েছে: <activity> ট্যাগে:

android:screenOrientation="landscape"
android:configChanges="keyboardHidden|orientation">

আমি পর্দায় ক্যামেরা দেখতে কি প্রদর্শন করতে একটি পূর্বরূপ ব্যবহার করছি।

আমি সবকিছু জরিমানা কাজ, পৃষ্ঠ তৈরি, পৃষ্ঠ সেট এবং পৃষ্ঠ প্রদর্শিত হয় পেতে পারেন।

তবে এটি সবসময় প্রতিকৃতি মোডে একটি ভুল 90 ডিগ্রি কোণে ছবি প্রদর্শন করে।

যেমন ছবিতে:

আমি সচেতন যে নিম্নলিখিত কোডটি ব্যবহার করে ছবিটিকে সরাসরি সেট করা হবে:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

যাইহোক আমার একটি ক্রিয়াকলাপের মধ্যে পূর্বরূপ রয়েছে যার মধ্যে অন্যান্য উপাদান আছে এবং এটি আমার কার্যকলাপকে আড়াআড়ি মোডে প্রদর্শিত হওয়ার জন্য উপলব্ধি করে না। (ডিফল্টরূপে এটি নিষ্ক্রিয়)

তাই আমি ভাবছিলাম যে কি ঠিক আছে পূর্বরূপের অভিযোজন পরিবর্তন? এবং আমার বাকি কার্যকলাপটি সঠিকভাবে পোর্ট্রেট মোডে প্রদর্শিত হবে?

অথবা যাই হোক না কেন পূর্বরূপ ঘোরানো যাতে এটি সঠিকভাবে প্রদর্শিত হয়?


আমি এমসিএএমএআরএএসএসএসডি ডিসপ্লেঅরিয়েন্টেশন (90) এর পরামর্শ গ্রহণ করেছি; কিন্তু বিটম্যাপটি ঘোরানো কারণ কিছু কারণে অন্য সংস্করণ 2.3.3 সংস্করণে আমার জন্য কাজ করে না।

বিটম্যাপ ঘোরানোর জন্য আমি এটি করেছি:

Matrix matrix = new Matrix();
matrix.postRotate(90);
imageView1 = new ImageView(this);
Bitmap bitmap = BitmapFactory.decodeFile(files[i].getAbsolutePath());
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap , 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
Bitmap scaledBitmap = Bitmap.createScaledBitmap(rotatedBitmap, 80, 80, true);
imageView1.setImageBitmap(scaledBitmap);

এই সমস্যাটি এখানে দেখতে কিছু হার্ডওয়্যার সহ একটি বাগ হিসাবে শুরু হতে পারে তবে API 8 এ উপলব্ধ mCamera.setDisplayOrientation (ডিগ্রী) এ কলটি ব্যবহার করে এটি অতিক্রম করা যেতে পারে। সুতরাং আমি এটি প্রয়োগ করি:

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            
    if (isPreviewRunning) {
        mCamera.stopPreview();
    }

    Parameters parameters = mCamera.getParameters();
    Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

    if(display.getRotation() == Surface.ROTATION_0) {
        parameters.setPreviewSize(height, width);                           
        mCamera.setDisplayOrientation(90);
    }

    if(display.getRotation() == Surface.ROTATION_90) {
        parameters.setPreviewSize(width, height);                           
    }

    if(display.getRotation() == Surface.ROTATION_180) {
        parameters.setPreviewSize(height, width);               
    }

    if(display.getRotation() == Surface.ROTATION_270) {
        parameters.setPreviewSize(width, height);
        mCamera.setDisplayOrientation(180);
    }

    mCamera.setParameters(parameters);
    previewCamera();                      
}

And the previewCamera method :

public void previewCamera() {        
    try {           
        mCamera.setPreviewDisplay(mSurfaceHolder);          
        mCamera.startPreview();
        isPreviewRunning = true;
    } catch(Exception e) {
        Log.d(APP_CLASS, "Cannot start preview", e);    
    }
}

এটি একটি এইচটিসি ডিজায়ারের দিকে ছিল এবং আমাকে প্রথমে ঘূর্ণন চেকগুলিতে লগিং বিবৃতিতে রাখতে হয়েছিল এবং বলার অপেক্ষা রাখে না যে ডিভাইসটি কীভাবে ঘূর্ণন করে এবং ডিভাইসটিতে ডিবাগ করে এবং ডিভাইসটিকে ঘোরানোর সময় লগক্যাট আউটপুটটি দেখে। এইচটিসি ডিজায়ারের জন্য 0 টি ফোনটি আপনার পছন্দের (প্রতিকৃতি) হিসাবে ছিল, 90 ডিগ্রী ফোনটি 90 ডিগ্রী কেরিয়ার-ক্লকওয়ায়েস চালু করছিল (আমি মনে করি এটি ঘড়ির কাঁধে ছিল)। কোডটিতে আপনি দেখবেন যে যখন ফোনটি 90 বা 180 ডিগ্রী ছিল তখন আমি কোনও ডিসপ্লে ঘূর্ণন করার প্রয়োজন ছিল না - ডিভাইসটি নিজেই এটি পরিচালনা করতে লাগলো। শুধুমাত্র একটি বিন্দু সঠিকভাবে কাজ করে না: 270 ডিগ্রি ঘূর্ণনটি যখন আপনি 90 ডিগ্রী ঘড়ির কাঁটার দিকে এবং ডিসপ্লে ঘূর্ণন কাউন্টারগুলিকে ঠিক করেন তখন ঠিক আছে কিন্তু যদি আপনি 270 ডিগ্রী ঘড়ির ঘড়ির কাঁটার দিকে ঘোরান, তবে এটি সঠিকভাবে ক্ষতিপূরণ দেওয়ার মতো মনে হয় না।

PS উপযুক্ত ঘূর্ণন মধ্যে প্রস্থ এবং উচ্চতা swapover নোট।


প্রদর্শন অভিযোজন সেট করার চেষ্টা করুন। এটা আমার সমস্যা সমাধান করে।

 mCamera.setDisplayOrientation(90);

 public void surfaceCreated(SurfaceHolder holder) {
     mCamera = Camera.open();
     mCamera.setDisplayOrientation(90);
     try {
         mCamera.setPreviewDisplay(holder);
         mCamera.setPreviewCallback(new PreviewCallback() {

             @Override
             public void onPreviewFrame(byte[] data, Camera camera) {
             }
         });

     } catch (Exception e) {
         e.printStackTrace();
     }
}

এই কোড চেষ্টা করুন





portrait