| 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);
 
-         }
 
-     }
 
- }
 
 
  |