| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | using System;using System.Collections.Generic;using System.IO;using Plugin.Media;using Xamarin.Forms;using Xamarin.Forms.Xaml;using XF.Material.Forms.UI.Dialogs;namespace comal.timesheets{    [XamlCompilation(XamlCompilationOptions.Compile)]    public partial class MultiImageCapture : ContentView    {        public List<Image> Images { get; set; }        public MultiImageCapture(bool disablelibrary = false)        {            InitializeComponent();            if (disablelibrary)                ChooseImage.IsEnabled = false;            Images = new List<Image>();        }        #region Buttons Pressed        private void TakePhoto_Clicked(object sender, EventArgs e)        {            OpenCamera();        }        private void ChooseImage_Clicked(object sender, EventArgs e)        {            OpenLibrary();        }        private async void OpenCamera()        {            try            {                await CrossMedia.Current.Initialize();                if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)                {                    return;                }                String filename = String.Format("{0:yyyy-MM-dd HH:mm:ss.fff}.png", DateTime.Now);                var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions                {                    Name = filename,                    CompressionQuality = 15,                    PhotoSize = Plugin.Media.Abstractions.PhotoSize.Full,                    SaveMetaData = false                }); ;                if (file == null)                    return;                AddPhoto(file);            }            catch            { }        }        private async void OpenLibrary()        {            try            {                await CrossMedia.Current.Initialize();                if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)                {                    return;                }                var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions()                {                    CompressionQuality = 15,                    PhotoSize = Plugin.Media.Abstractions.PhotoSize.Full,                });                if (file == null)                    return;                AddPhoto(file);            }            catch            {                return;            }        }        #endregion        private async void AddPhoto(Plugin.Media.Abstractions.MediaFile file)        {            try            {                using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Adding Photo"))                {                    var memoryStream = new MemoryStream();                    if (Device.RuntimePlatform.Equals(Device.Android))                        file.GetStream().CopyTo(memoryStream);                    else if (Device.RuntimePlatform.Equals(Device.iOS))                        file.GetStreamWithImageRotatedForExternalStorage().CopyTo(memoryStream);                    var data = memoryStream.ToArray();                    DataToImage(data);                }            }            catch            { }        }        public void DataToImage(byte[] data)        {            try            {                ImageSource src = ImageSource.FromStream(() => new MemoryStream(data));                               Image img = new Image();                img.HeightRequest = 150;                img.WidthRequest = 150;                img.Aspect = Aspect.AspectFit;                img.VerticalOptions = LayoutOptions.FillAndExpand;                img.HorizontalOptions = LayoutOptions.FillAndExpand;                img.Source = src;                img.GestureRecognizers.Add(new TapGestureRecognizer                {                    Command = new Command(OnTap),                    CommandParameter = src,                    NumberOfTapsRequired = 1                });                if (img != null)                {                    Images.Add(img);                    RefreshView();                }            }            catch            { }        }        private void RefreshView()        {            Device.BeginInvokeOnMainThread(() =>            {                imagesStackLayout.Children.Clear();                if (Images.Count > 0)                    addDeleteLbl.Text = "Tap on photo to view / delete";                else                    addDeleteLbl.Text = "Add photo(s) below:";                foreach (Image img in Images)                {                    imagesStackLayout.Children.Add(img);                }            });        }        private void OnTap(object obj)        {            ImageViewerEditor imageViewEditor = new ImageViewerEditor(obj as ImageSource, true);            imageViewEditor.OnDeleteSelected += () =>            {                Image img = Images.Find(x => x.Source.Equals(obj as ImageSource));                Images.Remove(img);                RefreshView();            };            imageViewEditor.OnSaveSelected += (byte[] array) =>             {                Image img = Images.Find(x => x.Source.Equals(obj as ImageSource));                Images.Remove(img);                DataToImage(array);            };            Navigation.PushAsync(imageViewEditor);        }    }}
 |