Exemple #1
0
        private async Task <Stream> GetStreamPHAsync(string path)
        {
            Debug.WriteLine("MediaFile: GetStreamPH entered with path = {0}", (object)path);
            var streamCompletion = new TaskCompletionSource <Stream>();

            using (var assetUrl = new NSUrl(path))
            {
                using (var asset = GetAssetPH(assetUrl))
                {
                    var    imageDataTCS = new TaskCompletionSource <NSData>();
                    NSData imgData;
                    using (var manager = new PHImageManager())
                    {
                        manager.RequestImageData(
                            asset,
                            null,
                            (data, dataUti, orientation, info) =>
                        {
                            Debug.WriteLine("MediaFile: data is {0} bytes", data.Length);
                            imageDataTCS.SetResult(data);
                        });
                        Debug.WriteLine("MediaFile: waiting for imgData");
                        imgData = await imageDataTCS.Task.ConfigureAwait(false);
                    }
                    Debug.WriteLine("MediaFile: imgData is {0} bytes", imgData.Length);
                    streamCompletion.SetResult(imgData.AsStream());
                }
            }
            Debug.WriteLine("MediaFile: waiting for stream");
            var stream = await streamCompletion.Task;

            Debug.WriteLine("MediaFile: stream returned with length {0}", stream.Length);
            return(stream);
        }
Exemple #2
0
        private void GoForward(object sender, EventArgs e)
        {
            var croppedPhotos = new List <Tuple <NSDictionary, UIImage> >();

            var currentPhoto = source.ImageAssets.FirstOrDefault(a => a.Asset.LocalIdentifier == source.CurrentlySelectedItem.Item2.LocalIdentifier);

            if (currentPhoto != null)
            {
                currentPhoto.Offset            = _cropView.ContentOffset;
                currentPhoto.Scale             = _cropView.ZoomScale;
                currentPhoto.OriginalImageSize = _cropView.originalImageSize;
                currentPhoto.Orientation       = _cropView.orientation;
            }

            foreach (var item in source.ImageAssets)
            {
                NSDictionary metadata     = null;
                var          croppedPhoto = _cropView.CropImage(item);
                _m.RequestImageData(item.Asset, new PHImageRequestOptions()
                {
                    Synchronous = true
                }, (data, dataUti, orientation, info) =>
                {
                    var dataSource = CGImageSource.FromData(data);
                    metadata       = dataSource.GetProperties(0).Dictionary;
                });

                croppedPhotos.Add(new Tuple <NSDictionary, UIImage>(metadata, croppedPhoto));
            }

            var descriptionViewController = new DescriptionViewController(croppedPhotos, "jpg");

            NavigationController.PushViewController(descriptionViewController, true);
        }
Exemple #3
0
        public override void OnTakePicturesComplete(MultiAssetEventArgs pictures)
        {
            if (pictures == null)
            {
                return;
            }
            ImagesAttach.Clear();
            ImagesToAddCount = pictures.Assets.Length;
            CallbacksCount   = 0;

            var imageManager = new PHImageManager();

            foreach (var asset in pictures.Assets)
            {
                imageManager.RequestImageData(asset,
                                              new PHImageRequestOptions {
                    DeliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat
                },
                                              (NSData data, NSString dataUti, UIImageOrientation orientation, NSDictionary info) =>
                {
                    double?latFinal = null;
                    double?lonFinal = null;
                    if (data != null)
                    {
                        GetLocationFromImageData(data, ref latFinal, ref lonFinal);
                    }

                    var picture = new CameraPicture {
                        Image = UIImage.LoadFromData(data), Data = data, Lat = latFinal, Lon = lonFinal
                    };
                    AddImagesIfRequired(picture);
                });
            }
        }
        public async Task <List <LocalFileInformation> > GetImagesAsync(IEnumerable <string> existingFileNames)
        {
            var tcs    = new TaskCompletionSource <List <LocalFileInformation> >();
            var images = new List <LocalFileInformation>();

            await this.GetImagesAssets();

            foreach (PHAsset asset in this.imagesResult)
            {
                using (asset)
                {
                    string name = null;
                    string path = null;

                    imageManager.RequestImageData(asset, requestOptions, (data, dataUti, orientation, info) =>
                    {
                        var fileURL = info?[(NSString)@"PHImageFileURLKey"] as NSUrl;
                        name        = fileURL?.FilePathUrl.LastPathComponent ?? asset.LocalIdentifier;
                        path        = fileURL?.Path;
                        if (data != null)
                        {
                            Byte[] imageBytes = new Byte[data.Length];
                            System.Runtime.InteropServices.Marshal.Copy(data.Bytes, imageBytes, 0, Convert.ToInt32(data.Length));

                            images.Add(new LocalFileInformation
                            {
                                FileName    = name,
                                Url         = path,
                                File        = imageBytes,
                                CreatedDate = ImageService.NSDateToDateTime(asset.CreationDate)
                            });
                        }
                    });
                }
            }

            tcs.SetResult(images);
            return(await tcs.Task);
        }
Exemple #5
0
        private void FinishedPickingMedia(object sender, UIImagePickerMediaPickedEventArgs e)
        {
            var originalImage = e.Info[UIImagePickerController.OriginalImage] as UIImage;
            var imageManager  = new PHImageManager();

            imageManager.RequestImageData(e.PHAsset, null, (data, dataUti, orientation, info) =>
            {
                var source   = CGImageSource.FromData(data);
                var metadata = source.GetProperties(0).Dictionary;

                GoToDescription(originalImage, UIDeviceOrientation.Portrait, metadata);
                _imagePicker.DismissViewControllerAsync(false);
            });
        }
Exemple #6
0
        private async Task <string> GetFileNamePHAsync(string path)
        {
            Debug.WriteLine("MediaFile: starting GetFileNamePHAsync");
            var nameTCS = new TaskCompletionSource <string>();

            using (var assetUrl = new NSUrl(path))
            {
                using (var asset = GetAssetPH(assetUrl))
                {
                    using (var manager = new PHImageManager())
                    {
                        Debug.WriteLine("MediaFile: requesting image data for {0}", (object)path);

                        manager.RequestImageData(asset,
                                                 new PHImageRequestOptions {
                            Synchronous = true
                        },
                                                 (data, dataUti, orientation, info) =>
                        {
                            Debug.WriteLine("MediaFile: image data request returned");
                            var imageName = "Unknown";
                            var fileUrl   = info["PHImageFileURLKey"].ToString();
                            if (!string.IsNullOrWhiteSpace(fileUrl))
                            {
                                var slash = fileUrl.LastIndexOf('/');
                                if (slash > -1)
                                {
                                    imageName = fileUrl.Substring(slash + 1);
                                }
                            }
                            Debug.WriteLine("MediaFile: image name set to {0}", (object)imageName);
                            nameTCS.SetResult(imageName);
                        });
                        Debug.WriteLine("MediaFile: awaiting image name");
                        await nameTCS.Task;
                    }
                }
            }
            var name = nameTCS.Task.Result;

            Debug.WriteLine("MediaFile: image name returned {0}", (object)name);
            return(name);
        }
Exemple #7
0
        private async Task<string> GetFileNamePHAsync(string path)
        {
            Debug.WriteLine("MediaFile: starting GetFileNamePHAsync");
            var nameTCS = new TaskCompletionSource<string>();
            using (var assetUrl = new NSUrl(path))
            {
                using (var asset = GetAssetPH(assetUrl))
                {
                    using (var manager = new PHImageManager())
                    {
                        Debug.WriteLine("MediaFile: requesting image data for {0}", (object)path);

                        manager.RequestImageData(asset,
                            new PHImageRequestOptions { Synchronous = true },
                            (data, dataUti, orientation, info) =>
                            {
                                Debug.WriteLine("MediaFile: image data request returned");
                                var imageName = "Unknown";
                                var fileUrl = info["PHImageFileURLKey"].ToString();
                                if (!string.IsNullOrWhiteSpace(fileUrl))
                                {
                                    var slash = fileUrl.LastIndexOf('/');
                                    if (slash > -1)
                                        imageName = fileUrl.Substring(slash + 1);
                                }
                                Debug.WriteLine("MediaFile: image name set to {0}", (object)imageName);
                                nameTCS.SetResult(imageName);
                            });
                        Debug.WriteLine("MediaFile: awaiting image name");
                        await nameTCS.Task;
                    }
                }
            }
            var name = nameTCS.Task.Result;
            Debug.WriteLine("MediaFile: image name returned {0}", (object)name);
            return name;
        }
Exemple #8
0
 private async Task<Stream> GetStreamPHAsync(string path)
 {
     Debug.WriteLine("MediaFile: GetStreamPH entered with path = {0}", (object)path);
     var streamCompletion = new TaskCompletionSource<Stream>();
     using (var assetUrl = new NSUrl(path))
     {
         using (var asset = GetAssetPH(assetUrl))
         {
             var imageDataTCS = new TaskCompletionSource<NSData>();
             NSData imgData;
             using (var manager = new PHImageManager())
             {
                 manager.RequestImageData(
                     asset,
                     null,
                     (data, dataUti, orientation, info) =>
                     {
                         Debug.WriteLine("MediaFile: data is {0} bytes", data.Length);
                         imageDataTCS.SetResult(data);
                     });
                 Debug.WriteLine("MediaFile: waiting for imgData");
                 imgData = await imageDataTCS.Task.ConfigureAwait(false);
             }
             Debug.WriteLine("MediaFile: imgData is {0} bytes", imgData.Length);
             streamCompletion.SetResult(imgData.AsStream());
         }
     }
     Debug.WriteLine("MediaFile: waiting for stream");
     var stream = await streamCompletion.Task;
     Debug.WriteLine("MediaFile: stream returned with length {0}", stream.Length);
     return stream;
 }