none
WebClient RRS feed

  • Вопрос

  • Короче вот:

     webClient1->DownloadFile("https://pp.vk.me/c625528/v625528379/1e304/kF5ez0L38eY.jpg", "temp.jpg");
     pictureBox2->Image = gcnew Bitmap("temp.jpg");
     switch (listBox1->SelectedIndex){
     case 0:{
      webClient1->DownloadFile("https://cs7061.vk.me/c540102/v540102799/a892/FtgX6B-Qs5s.jpg", "temp.jpg");
      MessageBox::Show("Загрузка окончена!");
      pictureBox2->Image = gcnew Bitmap("temp.jpg");
      textBox3->Text = "Дистрибутив Ubuntu 14.10 разрядности 32 бита. Опрационная система бесплатная и стабильная. Попробуйте прямо сейчас!";
      break;
     }
     case 1:{
      webClient1->DownloadFile("https://pp.vk.me/c625528/v625528379/1e29a/wr-P-4rP7Qs.jpg", "temp.jpg");
      pictureBox2->Image = gcnew Bitmap("temp.jpg");
      textBox3->Text = "Дистрибутив Ubuntu 14.10 разрядности 64 бита. Опрационная система бесплатная и стабильная. Попробуйте прямо сейчас!";
      break;
     }
     }

    Первый файл скачивает и всё гуд, а второй просто не качает. Что делать? Спасибо.

    24 февраля 2015 г. 8:51

Ответы

  • Разумеется не катит. Ведь массив байтов не является объектом Image так как он... массив байтов.

    Если вам нужен Image следует создать экземпляр данного объекта (видимо его сабклас Bitmap). Для этого например можно вызвать конструктор который принимает поток. В качестве потока можно создать MemoryStream передав ему массив байтов.

    Кстати, вам следует определиться: либо вы забрасывайте C++ и используйте .Net объекты из .Net языка, либо вы программируйте на C++ используя C++ API и объекты.

    Иначе получается некая бесполезная каша и вместо обучения вы себя только запутывайте. Если уж используйте CLR то переходите на C#. 


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

    24 февраля 2015 г. 22:56
    Модератор

Все ответы

  • Добрый день.

    Вы качаете все в один и тот-же файл. Может он занят? Попробуйте разные имена для файлов на диске.

    24 февраля 2015 г. 11:42
    Отвечающий
  • Проблема в том, что после строк:

     webClient1->DownloadFile("https://pp.vk.me/c625528/v625528379/1e304/kF5ez0L38eY.jpg", "temp.jpg");
     pictureBox2->Image = gcnew Bitmap("temp.jpg");

    следующий webclient не может получить доступ в файлу, так как он занят picturebox,как сделать так, что picturebox отпустил файл но показывал изображение?

    24 февраля 2015 г. 18:10
  • Теоретически, можно попробовать использовать чтение в память из файла, поток файла закрывать, и картинку грузить из памяти. Но я бы для разных картинок использовал разные имена... Если нужно вообще разные-разные, то имена бы генерил на основе Guid-ов.
    24 февраля 2015 г. 19:43
    Отвечающий
  • Идея с загрузкой в память мне нравится, а как сделать так, чтобы webclient::dowloadfile грузил фото в ОЗУ а не на диск?
    24 февраля 2015 г. 20:55
  • Вызывайте DownloadData() и получайте массив байтов с картинкой.

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

    24 февраля 2015 г. 21:40
    Модератор
  • Пробовал так:

    pictureBox2

    ->Image=(System::Drawing::Image^)webClient1->DownloadData("https://pp.vk.me/c625528/v625528379/1e304/kF5ez0L38eY.jpg");

      - не катит.
    24 февраля 2015 г. 21:53
  • Разумеется не катит. Ведь массив байтов не является объектом Image так как он... массив байтов.

    Если вам нужен Image следует создать экземпляр данного объекта (видимо его сабклас Bitmap). Для этого например можно вызвать конструктор который принимает поток. В качестве потока можно создать MemoryStream передав ему массив байтов.

    Кстати, вам следует определиться: либо вы забрасывайте C++ и используйте .Net объекты из .Net языка, либо вы программируйте на C++ используя C++ API и объекты.

    Иначе получается некая бесполезная каша и вместо обучения вы себя только запутывайте. Если уж используйте CLR то переходите на C#. 


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

    24 февраля 2015 г. 22:56
    Модератор
  • Спасибо огромное!) Вот примерно так получилось:

    try{
       pictureBox2->Image = System::Drawing::Bitmap::FromStream(gcnew MemoryStream(webClient1->DownloadData("https://pp.vk.me/c625528/v625528379/1e304/kF5ez0L38eY.jpg")));
       switch (listBox1->SelectedIndex){
       case 0:{
        pictureBox2->Image = System::Drawing::Bitmap::FromStream(gcnew MemoryStream(webClient1->DownloadData("https://pp.vk.me/c625528/v625528379/1e29a/wr-P-4rP7Qs.jpg")));
        textBox3->Text = "Дистрибутив Ubuntu 14.10 разрядности 32 бита. Опрационная система бесплатная и стабильная. Попробуйте прямо сейчас!";
        break;
       }
       case 1:{
        pictureBox2->Image = System::Drawing::Bitmap::FromStream(gcnew MemoryStream(webClient1->DownloadData("https://pp.vk.me/c625528/v625528379/1e29a/wr-P-4rP7Qs.jpg")));
        textBox3->Text = "Дистрибутив Ubuntu 14.10 разрядности 64 бита. Опрационная система бесплатная и стабильная. Попробуйте прямо сейчас!";
        break;
       }
       }
      }
      catch (...){ MessageBox::Show("К сожалению не удалось!"); }

    25 февраля 2015 г. 0:24