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