Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
logik444
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 33
#1

Вывод изображения из WebClient

19.08.2015, 10:12. Просмотров 458. Ответов 7
Метки нет (Все метки)

Всем добрый день.
У меня в проекте есть вывод изображения в пикчер бокс из интернет (скачивание изображения->его вывод).
Это реализовано таким образом :
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public void DownLoadFile(string address)
        {
            WebClient client = new WebClient();
            uri = new Uri(address);
            client.DownloadFileAsync(uri, "img.jpg"); 
            client.DownloadFileCompleted += new AsyncCompletedEventHandler(Down);
           
        }
        void Down(object sender, AsyncCompletedEventArgs e)
        {
            pictureBox1.Image = Image.FromFile("img.jpg");
        }
Список адресов изображений есть в дата гредвью. Изображения скачиваются по клику в листбоксе.
C#
1
2
3
4
5
6
7
8
9
10
11
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            number =  listBox1.SelectedItem.ToString();
            for (int i = 0; i < dataGridView1.RowCount - 1; i++)
            {
                if (number == dataGridView1[1, i].Value)
                {
                    DownLoadFile(web + Convert.ToString(dataGridView1[5, i].Value));
                }
            }
        }
Проблема вот в чем:
Когда первый раз выбираешь в листбоксе - все ок, картинка подгружается, однако, после того как я выбираю другое изображения в листбоксе картинка не изменяется.Как решить эту проблему?
P.S Адрес изображения - верный. При выборе другого изображения в листбоксе переменная "адрес" меняется , т.е ошибка исключительно в том что изображение не хочет перегружаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2015, 10:12
Ответы с готовыми решениями:

WebClient.DownloadFileAsync и WebClient.DownloadFile
Если правильно понимаю, то WebClient.DownloadFileAsync и WebClient.DownloadFile...

Кеширование результата работы Webclient.DownloadStringAsync() (Windows Phone 8 Webclient)
Всем привет. Приложение для Windows Phone 8. Запускаю под дебагом. ...

Вывод изображения в 3D
Всем добрый день! Как реализовать функцию вывода изображения в 3д, если есть...

Не работает вывод изображения
Добрый день. Хочу вывести изображение, загруженное в ресурсы так, чтобы оно шло...

Вывод изображения в форме
Здравствуйте! Подскажите пожалуйста, как сделать так, чтобы по нажатию кнопки...

7
BroDIK
86 / 86 / 51
Регистрация: 19.06.2013
Сообщений: 323
20.08.2015, 09:58 #2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    number = listBox1.SelectedItem.ToString();
    for (int i = 0; i < dataGridView1.RowCount - 1; i++)
    {
        if (number == dataGridView1[1, i].Value)
        {
            if (pictureBox1.Image != null)      // Если изображение загружено..
                pictureBox1.Image.Dispose();    // ..то удаляем
            DownLoadFile(web + Convert.ToString(dataGridView1[5, i].Value));
        }
    }
}
1
Woldemar89
TheGreatCornholio
1158 / 646 / 271
Регистрация: 30.07.2015
Сообщений: 2,251
Завершенные тесты: 1
20.08.2015, 11:01 #3
Зачем использовать файлы, когда можно пилить все в памяти?
Так должно работать. Воспользуйся, вместо DownLoadFile попробуй:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        public void LoadImage(string _url)
        {
 
            try
            {
 
                
                             
                using (WebClient client = new WebClient()) {
 
 
                   client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(DownloadDataCompleted);
                   client.DownloadDataAsync(new Uri(_url));
                
                                
                }
                
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); return; }
                
 
        }
 
        private void DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            try
            {
          
            using (MemoryStream ms = new MemoryStream(e.Result))
                      {
 
                      pictureBox1.Image = new Bitmap(ms);
                      pictureBox1.Refresh();
                      
                      }
            
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); return; }
        
        }
Или попробуй пихнуть pictureBox1.Refresh(); в свой код.
1
BroDIK
20.08.2015, 14:29
  #4

Не по теме:

Woldemar89, а если ТС'у нужно скачивать? Не люблю, когда на форуме предлагают изменить функционал приложения :negative:

0
Woldemar89
TheGreatCornholio
1158 / 646 / 271
Регистрация: 30.07.2015
Сообщений: 2,251
Завершенные тесты: 1
20.08.2015, 22:41 #5

Не по теме:


Цитата Сообщение от BroDIK Посмотреть сообщение
Woldemar89, а если ТС'у нужно скачивать? Не люблю, когда на форуме предлагают изменить функционал приложения


ТС - пусть сам выберет,что делать ,тк я сказал
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Или попробуй пихнуть pictureBox1.Refresh(); в свой код.
0
BroDIK
86 / 86 / 51
Регистрация: 19.06.2013
Сообщений: 323
21.08.2015, 14:21 #6
Цитата Сообщение от Woldemar89 Посмотреть сообщение
тк я сказал
Ваш код с методом Refresh является нерабочим! Цитату см. ниже:
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Или попробуй пихнуть pictureBox1.Refresh(); в свой код.
Объясняю почему: загруженная картинка используется как ресурс, она загружена в данный момент, поэтому ее нельзя перезаписать (отсюда и проблема у ТС'а). Поэтому изображение нужно освободить методом Dispose.
0
Woldemar89
TheGreatCornholio
1158 / 646 / 271
Регистрация: 30.07.2015
Сообщений: 2,251
Завершенные тесты: 1
21.08.2015, 21:52 #7
Вы предложили, я предложил. Оба варианта рабочие, вроде как. Поэтому -
Цитата Сообщение от Woldemar89 Посмотреть сообщение
ТС - пусть сам выберет,что делать
0
logik444
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 33
09.09.2015, 22:40  [ТС] #8
Большое всем спасибо) я просто не заморачиваясь использовал picturebox.load)
0
09.09.2015, 22:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2015, 22:40

Вывод изображения в picturebox
Вообщем, программа Быстрого Преобразования Фурье (Берет изображение и выводит...

Вывод изображения в PictureBox
Добрый день, прошу помощи. В коде существует массив MaxS, размером 256 на 256,...

Вывод изображения с интернета
Ребята подскажите пожалуйста как правильно выводит изображения по ссылке из ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru