如何从Xamarin.iOS中的URL加载图像

时间:2016-08-03 09:05:22

标签: c# ios xamarin xamarin.ios

当我从画廊中选择一张照片时,我有类似的东西:

NSUrl referenceURL = e.Info[new  
NSString("UIImagePickerControllerReferenceURL")] as NSUrl;
//imageURL = referenceURL.AbsoluteString;
imageURL = referenceURL.AbsoluteUrl.ToString();
string path = referenceURL.Path;

NSUrl url1 = referenceURL.FilePathUrl;
NSUrl url2 = referenceURL.FileReferenceUrl;

现在我尝试从网址加载该图片:

var url = new NSUrl(imageURL);
var data = NSData.FromUrl(url);
defectImage.Image = UIImage.LoadFromData(data);

data仍为空。

从网址加载图片的正确方法是什么?

注意:url1和url2只是示例。 path类似于" / imagename.jpg"

也许我正在以错误的方式检索网址?有很多方法可以获得路径/网址。

2 个答案:

答案 0 :(得分:3)

由于这些图片网址是"资产 - 图书馆"基于,所以你需要通过ALAssetsLibrary来访问它们:

var url = e.Info[UIImagePickerController.ReferenceUrl] as NSUrl;
var asset = new ALAssetsLibrary();
UIImage image;
asset.AssetForUrl(
    url, 
    (ALAsset obj) =>
    {
        var assetRep = obj.DefaultRepresentation;
        var cGImage = assetRep.GetFullScreenImage();
        image = new UIImage(cGImage);
        // Do something with "image" here... i.e.: assign it to a UIImageView
        imageView.Image = image;
    }, 
    (NSError err) => 
    { 
        Console.WriteLine(err);
    }
);

注意:如果您不必支持iOS 7客户端,您真的应该开始使用 Photos框架 ....

  

从iOS 9.0开始,不推荐使用Assets Library框架。相反,请使用Photos框架,在iOS 8.0及更高版本中,它可以为用户的照片库提供更多功能和更好的性能。

参考:https://developer.apple.com/library/ios/documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/index.html

答案 1 :(得分:0)

您可以使用nuget包FFImageLoading:

ImageService.Instance.LoadUrl("url").Into(YourUIImageView);