2017-08-17 1 views
0

Comme je le sais, il s'agit d'une approche simple pour l'enregistrer dans une photothèque. Mais il peut enregistrer avec un nom de fichier personnalisé. Mais je veux l'enregistrer avec filename.jpg dans la bibliothèque de photos.Enregistrer UIImage en tant que fichier jpg dans le répertoire de la photothèque en Xamarin.iOS

J'essaye tellement de code mais rien ne m'aide.

Code 1:

var imageName = "/" + dicomId.ToString() + ".jpg"; 

var documentsDirectory = Environment.GetFolderPath 
        (Environment.SpecialFolder.Personal); 

string jpgFilename = System.IO.Path.Combine(documentsDirectory, imageName); // hardcoded filename, overwritten each time 
NSData imgData = dicomImage.AsJPEG(); 
NSError err = null; 
if (imgData.Save(jpgFilename, false, out err)) 
{ 
    Console.WriteLine("saved as " + jpgFilename); 
} 
else 
{ 
    Console.WriteLine("NOT saved as " + jpgFilename + " because" + err.LocalizedDescription); 
} 

Cette partie de code va si la condition, mais il ne peut pas enregistrer l'image.

Code 2:

Si vous utilisez cette partie du Code

var documentsDirectoryPath = NSSearchPath.GetDirectories(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User, true)[0]; 

Il vous donnera n'êtes pas autorisé à enregistrer l'image. J'ai essayé beaucoup de choses sur google et SO, mais rien ne pouvait m'aider.

Edit:

info.plist

enter image description here

Toute aide sera la bienvenue.

+0

Avez-vous ajouté l'autorisation appropriée dans le fichier plist? spécialement Confidentialité - Utilisation de la bibliothèque de photos Description –

+0

@saketkumar J'ai déjà ajouté la permission .. – Ironman

+0

Dans votre titre, vous dites que vous voulez enregistrer le fichier png, en question, vous dites, vous voulez le sauver avec jpg. dans quel format voulez-vous l'enregistrer? –

Répondre

0

Comment utiliser UIImage.SaveToPhotosAlbum()?

L'utilisation est quelque chose comme:

image.SaveToPhotosAlbum((uiImage, nsError) => 
{ 
    if (nsError != null) 
     // do something about the error.. 
    else 
     // image should be saved 
}); 

Assurez-vous que vous avez demandé des autorisations avant d'essayer de sauver.

PHPhotoLibrary.RequestAuthorization(status => 
{ 
    switch (status) 
    { 
     case PHAuthorizationStatus.Restricted: 
     case PHAuthorizationStatus.Denied: 
      // nope you don't have permission 
      break; 
     case PHAuthorizationStatus.Authorized: 
      // yep it is ok to save 
      break; 
    } 
}); 

Edit: si vous voulez plus de contrôle, vous devez utiliser PHPhotosLibrary, qui est une API terrible ...

var library = PHPhotoLibrary.SharedPhotoLibrary; 

var albumName = "MyPhotos"; 

var fetchOptions = new PHFetchOptions(); 
fetchOptions.Predicate = NSPredicate.FromFormat($"title = {albumName}"); 
var assetsCollections = PHAssetCollection.FetchAssetCollections(
    PHAssetCollectionType.Album, PHAssetCollectionSubtype.Any, fetchOptions); 

var collection = assetsCollections.firstObject as PHAssetCollection; 

library.PerformChanges(() => { 
    var options = new PHAssetResourceCreationOptions(); 
    options.OriginalFilename = "filename.jpg"; 
    var createRequest = PHAssetCreationRequest.CreationRequestForAsset(); 
    createRequest.AddResource(PHAssetResourceType.FullSizePhoto, image.AsJPEG(1), options); 

    // if you want to save to specific album... otherwise just remove these three lines 
    var placeholder = createRequest.PlaceholderForCreatedAsset; 
    var albumChangeRequest = PHAssetCollectionChangeRequest.ChangeRequest(collection); 
    albumChangeRequest.AddAssets(new PHObject[] { placeholder }); 
}, 
(ok, error) => { 
    if (error != null) 
    { 
     // someone set up us the bomb 
    } 
});