none
При загрузке картинки из URL, ошибка: Значение выходит за границы допустимого диапазона RRS feed

  • Вопрос

  • Здравствуйте, создаю приложение которое загружает картинку из URL веб-сайта в компонент Image. В основном все хорошо, картинки без проблем загружаются и отображаются в Image, но очень редко попадаются картинки из за которых приложение падает с ошибкой:

    Необработанное исключение типа "System.ArgumentException" в PresentationCore.dll
    Дополнительные сведения: Значение выходит за границы допустимого диапазона.

    Пример кода:

    <Image x:Name="Image1" Stretch="Uniform"/>

    BitmapImage bi = new BitmapImage();
    bi.BeginInit();
    bi.UriSource = new Uri("http://site.ru/image.jpg");
    bi.EndInit();
    Image1.Source = bi;

    Такой код работает, но вот на некоторых картинках бывает ошибка. Если кто сталкивался или знает в чем проблема, подскажите. Спасибо.

    12 июля 2015 г. 22:13

Ответы

  • В общем удалось решить проблему таким способом:

    WebClient wc = new WebClient();
    wc.DownloadDataAsync(new Uri("http://site.ru/image.jpg"));
    wc.DownloadDataCompleted += (o, w) =>
                {
                    if (w.Error == null)
                    {
                        using (MemoryStream stream = new MemoryStream(w.Result))
                        {
                            Stream output = new MemoryStream();
                            using (Stream input = stream)
                            {
                                input.CopyTo(output);
                            }
                            output.Position = 0;
                            Bitmap bImg = (Bitmap)Bitmap.FromStream(output);
                            BitmapImage bi = new BitmapImage();
                            using (MemoryStream memory = new MemoryStream())
                            {
                                bImg.Save(memory, ImageFormat.Png);
                                memory.Position = 0;
                                bi.BeginInit();
                                bi.StreamSource = memory;
                                bi.CacheOption = BitmapCacheOption.OnLoad;
                                bi.EndInit();
                            }
                            Image1.Source = bi;
                        }
                    }              
                };


    Может кому пригодится.


    14 июля 2015 г. 22:22

Все ответы

  • Обычно проблема в том что картинки на деле не картинки (например сервер вместо картинки вернул 404 или другую ошибку), или в формате который не поддерживается/не верен.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    12 июля 2015 г. 22:19
    Модератор
  • Ну я ссылку даю 100% на картинку которая открывается в браузере и скачивается на компьютер, но вот если эту картинку попробовать подключить к компоненту Image, выдает ошибку.
    13 июля 2015 г. 13:06
  • Сейчас нет возможности проверить, но кажется, если указывать URL в XAML, то ошибки проглатываются.

    То есть вы создаете свойство, к которому привязываетесь из XAML, а в коде присваиваете URL этому свойству.


    VB.Net - WPF, WinRT, WP

    13 июля 2015 г. 15:11
    Отвечающий
  • В общем удалось решить проблему таким способом:

    WebClient wc = new WebClient();
    wc.DownloadDataAsync(new Uri("http://site.ru/image.jpg"));
    wc.DownloadDataCompleted += (o, w) =>
                {
                    if (w.Error == null)
                    {
                        using (MemoryStream stream = new MemoryStream(w.Result))
                        {
                            Stream output = new MemoryStream();
                            using (Stream input = stream)
                            {
                                input.CopyTo(output);
                            }
                            output.Position = 0;
                            Bitmap bImg = (Bitmap)Bitmap.FromStream(output);
                            BitmapImage bi = new BitmapImage();
                            using (MemoryStream memory = new MemoryStream())
                            {
                                bImg.Save(memory, ImageFormat.Png);
                                memory.Position = 0;
                                bi.BeginInit();
                                bi.StreamSource = memory;
                                bi.CacheOption = BitmapCacheOption.OnLoad;
                                bi.EndInit();
                            }
                            Image1.Source = bi;
                        }
                    }              
                };


    Может кому пригодится.


    14 июля 2015 г. 22:22