Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Xamarin.iOS中的URL加载图像_C#_Ios_Xamarin_Xamarin.ios - Fatal编程技术网

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

C# 如何从Xamarin.iOS中的URL加载图像,c#,ios,xamarin,xamarin.ios,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 url

当我从图库中选择一张图片时,我会看到如下内容:

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;
现在我尝试从URL加载该图像:

var url = new NSUrl(imageURL);
var data = NSData.FromUrl(url);
defectImage.Image = UIImage.LoadFromData(data);
但是
数据
仍然为空

从URL加载图像的正确方法是什么

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


也许我检索URL的方式不对?获取路径/url的方法有很多。

因为这些图像url是基于“资产库”的,所以您需要通过
库访问它们:

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客户端,您真的应该开始使用照片框架

从iOS 9.0开始,资产库框架已被弃用。取而代之的是使用照片框架,它在iOS 8.0及更高版本中提供了更多功能和更好的性能,可用于处理用户的照片库


Ref:

因为这些图像URL是基于“资产库”的,所以您需要通过
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客户端,您真的应该开始使用照片框架

从iOS 9.0开始,资产库框架已被弃用。取而代之的是使用照片框架,它在iOS 8.0及更高版本中提供了更多功能和更好的性能,可用于处理用户的照片库


参考:

您可以使用nuget软件包进行图像加载:

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

您可以使用nuget包进行图像加载:

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

如果您开始使用xamarin进行开发,那么阅读apple文档并将其转换为c#是非常困难的。iOS@raymondis你是对的,在查看苹果文档时,查看
Swift
代码示例会有很大帮助,因为你通常可以对
Obj-C
文档进行直接转换。哦,是的,很好的提示!非常感谢你!!如果您开始使用xamarin进行开发,那么阅读apple文档并将其转换为c#是非常困难的。iOS@raymondis你是对的,在查看苹果文档时,查看
Swift
代码示例会有很大帮助,因为你通常可以对
Obj-C
文档进行直接转换。哦,是的,很好的提示!非常感谢你!!