this questionはthis blog postと回答してから4年です。UIImageからのURL:Xamarin/C#
URLからの画像を使用してUIImageを作成する標準的な方法はありますか?何かのように:
UIImage image = UIImage.FromFile("http://foo.com/bar.jpg");
私はおそらく本当に単純な何かが不足しているように感じる。
this questionはthis blog postと回答してから4年です。UIImageからのURL:Xamarin/C#
URLからの画像を使用してUIImageを作成する標準的な方法はありますか?何かのように:
UIImage image = UIImage.FromFile("http://foo.com/bar.jpg");
私はおそらく本当に単純な何かが不足しているように感じる。
一行ではなく、行数が非常に少ないので、あなた自身でロールバックすることができます。例えば。 UIImage
から1を含む
static UIImage FromUrl (string uri)
{
using (var url = new NSUrl (uri))
using (var data = NSData.FromUrl (url))
return UIImage.LoadFromData (data);
}
呼び出しは、スレッドセーフです。あなたが行うことができます新しいのawait /非同期サポートにより
UIスレッドをブロックしないように、画像を非同期に読み込む必要があります。 MonoTouch.Dialogには、使用できるImageLoader(sec 5.3参照)クラスが含まれています。
UrlImageStoreには、画像を非同期に読み込むのに役立ついくつかのバリエーションがあります。
最後に、手動で行う場合は、Xamarin Recipeがあります。
:
public async Task<UIImage> LoadImage (string imageUrl)
{
var httpClient = new HttpClient();
Task<byte[]> contentsTask = httpClient.GetByteArrayAsync (imageUrl);
// await! control returns to the caller and the task continues to run on another thread
var contents = await contentsTask;
// load from bytes
return UIImage.LoadFromData (NSData.FromArray (contents));
}
とあなたがこれを呼び出す:私は上記を試してみました
someYourUIImageObjectOnUI.Image = await this.LoadImage ("some image url");
バイトを参照してください。 [] contents = httpClient.GetByteArrayAsync(imageUrl);を待ちます。 – winnicki
、それは素晴らしいアイデアのように見えますが、私は得ます: は、暗黙的に問題があるためた タイプSystem.Threading.Tasks.Task<MonoTouch.UIKit.UIImage>' to
Monotouch.UIKit.UIImage」
は、[解決策を見つけ]変換できません。 obj.Image = this.LoadImage(imageUrl) も、非同期とマークされたメソッドに存在する必要があります。 それは動作します!私は、このようなhttps://www.google.ca/images/srpr/logo11w.pngとしてURLでこれをしようとすると
おかげ
は私が型「MonoTouch.Foundationのインスタンスを初期化できませんでした」を得ます。 NSUrl ':ネイティブの' initWithString: 'メソッドはnilを返しました。それがどうして起こるのか? – user2320724
NSUrlが投げて(ObjCで 'nil'を返します)、提供されたURLは無効です(RFC 2396に準拠していません)。アップルのドキュメント@ https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/occ/instm/NSURL/initWithString: – poupou