Skiasharp заимствует изображение из URL-адреса и рисует на холсте в Xamarin Forms

Я искал способ загрузить изображение из URL-адреса и нарисовать его на SKCanvas с помощью Skiasharp в Xamarin.

https://forums.xamarin.com/discussion/97717/skiasharp-get-skbitmap-from-url

Я нашел ссылку выше, но почему-то моя программа разбилась, используя пример.


person TPG    schedule 01.08.2020    source источник


Ответы (2)


После поиска в Интернете я, наконец, заставил код работать. Ниже мой код с немного большим количеством чего-то, например, сначала проверить, существует ли файл в URL-адресе, а также изменить размер изображения, чтобы он соответствовал всему размеру холста.

HttpWebResponse response = null;
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "HEAD";
request.Timeout = 2000; // miliseconds

try 
{
    response = (HttpWebResponse) request.GetResponse();

    if (response.StatusCode == HttpStatusCode.OK) //Make sure the URL is not empty and the image is there
    {
        // download the bytes
        byte[] stream = null;
        using(var webClient = new WebClient()) 
        {
            stream = webClient.DownloadData(url);
        }

        // decode the bitmap stream
        resourceBitmap = SKBitmap.Decode(stream);

        if (resourceBitmap != null) 
        {
            var resizedBitmap = resourceBitmap.Resize(info, SKFilterQuality.High); //Resize to the canvas
            canvas.DrawBitmap(resizedBitmap, 0, 0);
        }
    }
}
catch(Exception ex) 
{

}
finally 
{
    // Don't forget to close your response.
    if (response != null) 
    {
        response.Close();
    }
}
person TPG    schedule 01.08.2020

Вы можете использовать библиотеку FFImageLoading, она поддерживает установку Image Source в url из коробки. он использует SkiaSharp для рендеринга изображений. Или, если вы чувствуете себя авантюрно, вы всегда можете посмотреть эту реализацию в исходном коде и создать собственную в соответствии с вашими потребностями здесь

person Visual Sharp    schedule 01.08.2020