Как получить фотографию с сервера и отобразить ее в Image Control для Wp7 - PullRequest
2 голосов
/ 20 марта 2011

Я использую приведенный ниже код. Я просто не знаю, почему это не работает. Сообщение об ошибке: Неуказанная ошибка: bmp.SetSource (ms).

Я не знаком с HttpWebRequest для Wp7. Буду признателен за помощь в решении этой проблемы. Спасибо.

enter code here


 private void LoadPic()
    {
   HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://xxxxxx/MyImage.jpg");
        NetworkCredential creds = new NetworkCredential("Username", "Pwd");
        req.Credentials = creds;
        req.Method = "GET";
        req.BeginGetResponse(new AsyncCallback(GetStatusesCallBack), req);
    }

    public void GetStatusesCallBack(IAsyncResult result)
    {
        try
        {
            HttpWebRequest httpReq = (HttpWebRequest)result.AsyncState;
            HttpWebResponse response = (HttpWebResponse)httpReq.EndGetResponse(result);
            Stream myStream = response.GetResponseStream();
            int len = (int)myStream.Length;

            byte[] byt = new Byte[len];
            myStream.Read(byt, 0, len);
            myStream.Close();
            MemoryStream ms = new MemoryStream(byt);
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                BitmapImage bmp = new BitmapImage();
                bmp.SetSource(ms);

                image1.Source = bmp;
            });
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
   }

1 Ответ

1 голос
/ 20 марта 2011

Необходимо ли копировать поток ответов в байтовый массив, а затем в MemoryStream?Если нет, вы можете просто сделать следующее:

    Stream myStream = response.GetResponseStream();
    Deployment.Current.Dispatcher.BeginInvoke(() => {
        BitmapImage bmp = new BitmapImage();
        bmp.SetSource(myStream);
        image1.Source = bmp;
    });

Если вам по какой-либо причине необходимо сделать копию, вам нужно будет заполнить буфер в цикле:

    Stream myStream = response.GetResponseStream();
    int contentLength = (int)myStream.Length;
    byte[] byt = new Byte[contentLength];
    for (int pos = 0; pos < contentLength; )
    {
        int len = myStream.Read(byt, pos, contentLength - pos);
        if (len == 0)
        {
            throw new Exception("Upload aborted.");
        }
        pos += len;
    }
    MemoryStream ms = new MemoryStream(byt);
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        // same as above
    });

Вторая часть адаптирована (немного) из растровых изображений C #, байтовых массивов и потоков! .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...