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