Получить поток из абсолютного Ури - PullRequest
0 голосов
/ 22 сентября 2011

Я работаю с Windows Phone 7, и у меня очень сложная проблема. Пожалуйста, помогите мне ! Я хочу получить поток из абсолютного URI (из Интернета) изображения PNG. Но метод GetResourceStream работает только с относительными URI. Тогда я нашел форму imagetool http://imagetools.codeplex.com/, но до сих пор моя проблема не решена. Кто-нибудь может дать мне решение?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011

Как насчет использования HttpWebRequest и HttpWebResponse?

var uri = new Uri("http://chriskoenig.net/wp-content/uploads/2011/04/givecamp_125125_ad.jpg", UriKind.Absolute);
HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;
request.BeginGetResponse((ar) =>
{
    var response = request.EndGetResponse(ar);
    Dispatcher.BeginInvoke(() =>
    {
        using (var stream = response.GetResponseStream())
        {
            var image = new BitmapImage();
            image.SetSource(stream);
            MyImage.Source = image;
        }
    });
}, null);
0 голосов
/ 22 сентября 2011

Попробуйте этот простой поток кода изображения из абсолютного URL-адреса и сохраните его в изолированном хранилище

namespace eQuadrigaWP7
{
public class ItemViewModel : INotifyPropertyChanged
{
private string _imgURL;
public string imgURL
{
get
{
return _imgURL;
}
set
{
if (value != _imgURL)
{
_imgURL = value;
}
}
}
private BitmapImage _Image;
public BitmapImage Iimage
{
get
{
return _Image;
}
set
{
if (value != _Image)
{
_Image = value;
}
}
}

public void LoadIimage()
{
if (this.imgURL == null) throw new Exception("Error equadriga log");
HttpWebRequest downloadthumbnailrequest = (HttpWebRequest)WebRequest.Create(new Uri(this._imgURL));   ///this is main
DownloadThumbNailState thumbnailState = new DownloadThumbNailState();
thumbnailState.AsyncRequest = downloadthumbnailrequest;
downloadthumbnailrequest.BeginGetResponse(new AsyncCallback(HandleThumNailDownLoadResponse),
thumbnailState); 
 }

private void HandleThumNailDownLoadResponse(IAsyncResult asyncResult)
{
DownloadThumbNailState thumbnailState = (DownloadThumbNailState)asyncResult.AsyncState;
HttpWebRequest downloadthumbnailrequest = (HttpWebRequest)thumbnailState.AsyncRequest;
thumbnailState.AsyncResponse = (HttpWebResponse)downloadthumbnailrequest.EndGetResponse(asyncResult);
Stream imageStream = thumbnailState.AsyncResponse.GetResponseStream();
byte[] b = new byte[imageStream.Length];
imageStream.Read(b,0,Convert.ToInt32(imageStream.Length));
imageStream.Close();
MemoryStream ms = new MemoryStream(b);
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(ms);
String tempJPEG = "logo.jpg";

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (myIsolatedStorage.FileExists(tempJPEG))
{
myIsolatedStorage.DeleteFile(tempJPEG);
}
IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(tempJPEG);
WriteableBitmap wb = new WriteableBitmap(bmp);
Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
fileStream.Close();
this.Iimage = bmp;
}
});

}

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
if (null != PropertyChanged)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public class DownloadThumbNailState
{
public HttpWebRequest AsyncRequest { get; set; }
public HttpWebResponse AsyncResponse { get; set; }
}
}
}


ItemViewModel imageitem = new ItemViewModel();
imageitem.imgURL = "http://www.yoursite.in/bilder/9780199738663/titel.jpg";
imageitem.LoadIimage();
0 голосов
/ 22 сентября 2011

Попробуйте это,

        BitmaiImage bmp=new BitmaiImage();
        Image image=new Image();

        Uri url = new Uri("http://Ur url", UriKind.Absolute);
        HttpWebRequest reqest = (HttpWebRequest)WebRequest.Create(url);
        reqest.BeginGetResponse(DownloadImageCallback, reqest);    

    void DownloadImageCallback(IAsyncResult result)
    {
        HttpWebRequest req = (HttpWebRequest)result.AsyncState;
        HttpWebResponse responce = (HttpWebResponse)req.EndGetResponse(result);
        Stream s = responce.GetResponseStream();
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            bmp.SetSource(s);
            image.Source=bmp;
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...