Xamarin.Android
एंड्रॉइड डिवाइस से कैप्चर की गई तस्वीर के ओरिएंटेशन को सही कैसे करें
खोज…
टिप्पणियों
- यह एप्लिकेशन नमूना नीचे मेरे GitHub पर उपलब्ध है:
- Xamarin मोबाइल घटक प्रलेखन नीचे उपलब्ध है:
एंड्रॉइड डिवाइस से कैप्चर की गई तस्वीर के ओरिएंटेशन को सही कैसे करें
यह उदाहरण दिखाता है कि एंड्रॉइड डिवाइस पर छवि को कैसे लें और इसे सही ढंग से प्रदर्शित करें।
सबसे पहले हमें एक बटन और एक इमेजव्यू के साथ सैंपल एप्लिकेशन बनाना होगा। एक बार जब उपयोगकर्ता बटन कैमरा पर क्लिक करता है तो उसे लॉन्च किया जाता है और उपयोगकर्ता द्वारा चित्र का चयन करने के बाद इसे स्क्रीन पर उचित अभिविन्यास के साथ प्रदर्शित किया जाएगा।
- "TakePictureButton" नाम का बटन जोड़ें और "TakenPictureImageView" नाम का इमेजव्यू:
- अब खुले गतिविधि कोड के पीछे:
सबसे पहले अपने नियंत्रण का संदर्भ लें:
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();
};
}
- हमारे आवेदन में हम घटक स्टोर में उपलब्ध ज़ामरीन मोबाइल घटक का उपयोग करेंगे:
एक बार जब आप इसे प्रोजेक्ट में जोड़ते हैं, तो हम आगे बढ़ सकते हैं। कैमरा नीचे लॉन्च करने के लिए जिम्मेदार कोड जोड़ें। इस विधि को बटन क्लिक में आमंत्रित किया जाना चाहिए जैसा कि आप उपरोक्त कोड में देख सकते हैं:
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); }
एक बार उपयोगकर्ता चित्र लेने के बाद हमें इसे उचित अभिविन्यास में प्रदर्शित करना चाहिए। नीचे विधि का उपयोग करने के लिए। यह ली गई छवि से 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; } }
उपयोगकर्ता द्वारा तस्वीर लेने के बाद 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()); } } }
एप्लिकेशन लॉन्च करें। परिणाम देखें एक तस्वीर लें:
बस। अब आपके पास सही अभिविन्यास में प्रदर्शित सभी चित्र होंगे।