खोज…


टिप्पणियों

  1. यह एप्लिकेशन नमूना नीचे मेरे GitHub पर उपलब्ध है:

https://github.com/Daniel-Krzyczkowski/XamarinAndroid/tree/master/AndroidPictureOrientation/PictureOrientationApp

  1. Xamarin मोबाइल घटक प्रलेखन नीचे उपलब्ध है:

https://components.xamarin.com/view/xamarin.mobile

एंड्रॉइड डिवाइस से कैप्चर की गई तस्वीर के ओरिएंटेशन को सही कैसे करें

यह उदाहरण दिखाता है कि एंड्रॉइड डिवाइस पर छवि को कैसे लें और इसे सही ढंग से प्रदर्शित करें।

सबसे पहले हमें एक बटन और एक इमेजव्यू के साथ सैंपल एप्लिकेशन बनाना होगा। एक बार जब उपयोगकर्ता बटन कैमरा पर क्लिक करता है तो उसे लॉन्च किया जाता है और उपयोगकर्ता द्वारा चित्र का चयन करने के बाद इसे स्क्रीन पर उचित अभिविन्यास के साथ प्रदर्शित किया जाएगा।

  1. "TakePictureButton" नाम का बटन जोड़ें और "TakenPictureImageView" नाम का इमेजव्यू:

यहाँ छवि विवरण दर्ज करें

  1. अब खुले गतिविधि कोड के पीछे:

सबसे पहले अपने नियंत्रण का संदर्भ लें:

ImageView _takenPictureImageView;
Button _takePictureButton;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Main);

        _takenPictureImageView = FindViewById<ImageView>(Resource.Id.TakenPictureImageView);
        _takePictureButton = FindViewById<Button>(Resource.Id.TakePictureButton);

        _takePictureButton.Click += delegate 
        {
            takePicture();
        };
    }
  1. हमारे आवेदन में हम घटक स्टोर में उपलब्ध ज़ामरीन मोबाइल घटक का उपयोग करेंगे:

यहाँ छवि विवरण दर्ज करें

  1. एक बार जब आप इसे प्रोजेक्ट में जोड़ते हैं, तो हम आगे बढ़ सकते हैं। कैमरा नीचे लॉन्च करने के लिए जिम्मेदार कोड जोड़ें। इस विधि को बटन क्लिक में आमंत्रित किया जाना चाहिए जैसा कि आप उपरोक्त कोड में देख सकते हैं:

    void takePicture()
     {
         var picker = new MediaPicker(this);
         DateTime now = DateTime.Now;
         var intent = picker.GetTakePhotoUI(new StoreCameraMediaOptions
         {
             Name = "picture_" + now.Day + "_" + now.Month + "_" + now.Year + ".jpg",
             Directory = null
         });
         StartActivityForResult(intent, 1);
     }
    
  1. एक बार उपयोगकर्ता चित्र लेने के बाद हमें इसे उचित अभिविन्यास में प्रदर्शित करना चाहिए। नीचे विधि का उपयोग करने के लिए। यह ली गई छवि से exif जानकारी प्राप्त करने के लिए जिम्मेदार है (चित्र लेने के क्षण के दौरान अभिविन्यास सहित) और उचित अभिविन्यास के साथ बिटमैप बनाने की तुलना में:

    Bitmap loadAndResizeBitmap(string filePath)
     {
         BitmapFactory.Options options = new BitmapFactory.Options { InJustDecodeBounds = true };
         BitmapFactory.DecodeFile(filePath, options);
    
         int REQUIRED_SIZE = 100;
         int width_tmp = options.OutWidth, height_tmp = options.OutHeight;
         int scale = 4;
         while (true)
         {
             if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
                 break;
             width_tmp /= 2;
             height_tmp /= 2;
             scale++;
         }
    
         options.InSampleSize = scale;
         options.InJustDecodeBounds = false;
         Bitmap resizedBitmap = BitmapFactory.DecodeFile(filePath, options);
    
         ExifInterface exif = null;
         try
         {
             exif = new ExifInterface(filePath);
             string orientation = exif.GetAttribute(ExifInterface.TagOrientation);
    
             Matrix matrix = new Matrix();
             switch (orientation)
             {
                 case "1": // landscape
                     break;
                 case "3":
                     matrix.PreRotate(180);
                     resizedBitmap = Bitmap.CreateBitmap(resizedBitmap, 0, 0, resizedBitmap.Width, resizedBitmap.Height, matrix, false);
                     matrix.Dispose();
                     matrix = null;
                     break;
                 case "4":
                     matrix.PreRotate(180);
                     resizedBitmap = Bitmap.CreateBitmap(resizedBitmap, 0, 0, resizedBitmap.Width, resizedBitmap.Height, matrix, false);
                     matrix.Dispose();
                     matrix = null;
                     break;
                 case "5":
                     matrix.PreRotate(90);
                     resizedBitmap = Bitmap.CreateBitmap(resizedBitmap, 0, 0, resizedBitmap.Width, resizedBitmap.Height, matrix, false);
                     matrix.Dispose();
                     matrix = null;
                     break;
                 case "6": // portrait
                     matrix.PreRotate(90);
                     resizedBitmap = Bitmap.CreateBitmap(resizedBitmap, 0, 0, resizedBitmap.Width, resizedBitmap.Height, matrix, false);
                     matrix.Dispose();
                     matrix = null;
                     break;
                 case "7":
                     matrix.PreRotate(-90);
                     resizedBitmap = Bitmap.CreateBitmap(resizedBitmap, 0, 0, resizedBitmap.Width, resizedBitmap.Height, matrix, false);
                     matrix.Dispose();
                     matrix = null;
                     break;
                 case "8":
                     matrix.PreRotate(-90);
                     resizedBitmap = Bitmap.CreateBitmap(resizedBitmap, 0, 0, resizedBitmap.Width, resizedBitmap.Height, matrix, false);
                     matrix.Dispose();
                     matrix = null;
                     break;
             }
    
             return resizedBitmap;
         }
    
         catch (IOException ex)
         {
             Console.WriteLine("An exception was thrown when reading exif from media file...:" + ex.Message);
             return null;
         }
     }
    
  2. उपयोगकर्ता द्वारा तस्वीर लेने के बाद OnActivityResult विधि में उपरोक्त विधि को लागू किया जाना चाहिए:

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
     {
         base.OnActivityResult(requestCode, resultCode, data);
    
         if (requestCode == 1)
         {
             if (resultCode == Result.Ok)
             {
                 data.GetMediaFileExtraAsync(this).ContinueWith(t =>
                 {
                     using (Bitmap bmp = loadAndResizeBitmap(t.Result.Path))
                     {
                         if (bmp != null)
                         _takenPictureImageView.SetImageBitmap(bmp);
                     }
    
                 }, TaskScheduler.FromCurrentSynchronizationContext());
             }
         }
     }
    
  3. एप्लिकेशन लॉन्च करें। परिणाम देखें एक तस्वीर लें:

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

बस। अब आपके पास सही अभिविन्यास में प्रदर्शित सभी चित्र होंगे।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow