2017-08-17 20 views
0

これはフォトライブラリに保存する簡易承認です。しかし、それはカスタムファイル名で保存することができます。UIImageをjpgファイルとしてXamarin.iOSのフォトライブラリディレクトリに保存します。

var someImage = UIImage.FromFile("someImage.jpg"); 
someImage.SaveToPhotosAlbum((image, error) => { 
    var o = image as UIImage; 
    Console.WriteLine("error:" + error); 
}) 

しかし、フォトライブラリにfilename.jpgという名前で保存します。

私は多くのコードを試しますが、何も私に助けを得ていません。

コード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); 
} 

このコード部分は、ifの条件になりますが、画像を保存することはできません。

コード2:

コード

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

のこの部分を使用している場合それはあなたがイメージを保存する権限がありません与えます。

私はGoogleでたくさんのことを試していますが、何も私に役立つことはありません。

編集:

のInfo.plist

enter image description here

任意の助けいただければ幸いです。

+0

あなたはplistファイルに適切な権限を追加しましたか? 特別にプライバシー - 写真ライブラリ使用説明 –

+0

@saketkumar私はすでに許可を追加しました.. – Ironman

+0

あなたのタイトルでは、あなたは言うことができませんpngファイルを保存したいと言うあなたは、jpgでそれを保存すると言う。 フォーマットを保存したいのですか? –

答えて

0

UIImage.SaveToPhotosAlbum()はどうですか?

使用法のようなものです:

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

は、あなたが保存しようとする前に許可を要求していることを確認します。

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

編集:あなたはより多くの制御をしたい場合、あなたはPHPhotosLibraryを使用する必要があり、ひどいAPIです...

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 
    } 
}); 
関連する問題