将图像从url加载到ImageView - C#

时间:2014-05-25 22:21:52

标签: c# android xamarin

我想在google中搜索之后在 c# android 编程)中将图片从url加载到imageview我无法找到任何好结果,谢谢你的帮助

我正在使用xamarin工作室

4 个答案:

答案 0 :(得分:18)

我从谷歌获得的第一个打击是在Xamarin论坛上thread讨论这个确切的问题:

private Bitmap GetImageBitmapFromUrl(string url)
{
     Bitmap imageBitmap = null;

     using (var webClient = new WebClient())
     {
          var imageBytes = webClient.DownloadData(url);
          if (imageBytes != null && imageBytes.Length > 0)
          {
               imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
          }
     }

     return imageBitmap;
}

var imageBitmap = GetImageBitmapFromUrl("http://xamarin.com/resources/design/home/devices.png");
imagen.SetImageBitmap(imageBitmap);

答案 1 :(得分:1)

  

Xamarin Android 中使用以下类:

public class DownloadImageTask : AsyncTask
{
    private ImageView bmImage;
    private ProgressBar progressBar;

    public DownloadImageTask( ImageView bmImage , ProgressBar progressBar)
    {
        this.bmImage = bmImage;
        this.progressBar = progressBar;
    }

    protected override void OnPostExecute( Object result )
    {
        base.OnPostExecute(result);
        bmImage.SetImageBitmap(( Bitmap ) result);
        if (progressBar != null)
            progressBar.Visibility = ViewStates.Gone;
    }


    protected override Object DoInBackground( params Object[] @params )
    {
        var urldisplay = @params[0].ToString();
        Bitmap mIcon11 = null;
        try
        {
            var req = WebRequest.Create(urldisplay);
            var response = req.GetResponse();
            var stream = response.GetResponseStream();

            mIcon11 = BitmapFactory.DecodeStream(stream);
        }
        catch ( Exception e )
        {

        }
        return mIcon11;
    }
}

执行:

new DownloadImageTask(imgProfile , progressBar).Execute(uri);

答案 2 :(得分:0)

这两种方法都有效,但异步进行是一种很好的做法。这里有一些很好的例子:

  1. Xamarin Android中的异步图像加载http://javatechig.com/xamarin/asynchronous-image-loading-xamarin-android
  2. xamarin-store-app image helper https://github.com/xamarin/xamarin-store-app/blob/master/XamarinStore.Droid/Helpers/Images.cs

答案 3 :(得分:0)

我这样做是为了使用SkiaSharp从URL将Svg加载到ImageView中。

在.xml

<ImageView
    android:contentDescription=""
    android:id="@+id/video_recorder_image"
    android:layout_width="wrap_content"
    android:layout_height="50dp" />

在活动/片段中。

private ImageView iconImageView;

public override void OnViewCreated(View view, Bundle savedInstanceState)
{
    iconImageView = (ImageView)view.FindViewById(Resource.Id.video_recorder_image);
    Bitmap image = GetImageBitmapFromUrl(_iconUrl);
}

private Bitmap GetImageBitmapFromUrl(string url)
{
    Bitmap imageBitmap = null;

    using (var webClient = new WebClient())
    {
        var imageBytes = webClient.DownloadData(url);
        if (imageBytes != null && imageBytes.Length > 0)
        {
            var svgContent = Convert.ToBase64String(imageBytes, 0, imageBytes.Length);
            var byteArray = Convert.FromBase64String(svgContent);

            using (var stream = new MemoryStream(byteArray))
            {
                var bitmap = new SKBitmap(500, 500);
                var canvas = new SKCanvas(bitmap);

                // load the SVG
                var svg = new SkiaSharp.Extended.Svg.SKSvg(new SKSize(500, 500));
                svg.Load(stream);

                // draw the SVG to the bitmap
                canvas.DrawPicture(svg.Picture);
                var skData = SKImage.FromBitmap(bitmap).Encode(SKEncodedImageFormat.Png, 100);

                // Convert image to string and then to Bitmap
                var convertedSvgStream = skData.AsStream();
                var convertedImageBytes = new byte[(int)convertedSvgStream.Length];
                convertedSvgStream.Seek(0, SeekOrigin.Begin);
                convertedSvgStream.Read(convertedImageBytes, 0, (int)convertedSvgStream.Length);

                imageBitmap = BitmapFactory.DecodeByteArray(convertedImageBytes, 0, convertedImageBytes.Length);
            }
        }
    }

    return imageBitmap;
}