[英]How to download an image from an URI and create a bitmap object from it?
I'm trying to download image from a website and create bitmap based on that image. 我正在尝试从网站下载图像并根据该图像创建位图。 It looks like this: 它看起来像这样:
public void test()
{
PostWebClient client = new PostWebClient(callback);
cookieContainer = new CookieContainer();
client.cookies = cookieContainer;
client.download(new Uri("SITE"));
}
public void callback(bool error, string res)
{
byte[] byteArray = UnicodeEncoding.UTF8.GetBytes(res);
MemoryStream stream = new MemoryStream( byteArray );
var tmp = new BitmapImage();
tmp.SetSource(stream);
}
I receive "Unspecified error" on last line of callback method. 我在回调方法的最后一行收到“未指定的错误”。 Interesting fact is that if I use BitmapImage(new Uri("SITE")) it works well... (I can't do this like that because I want to grab cookies from that URL. The image is an jpg. PostWebClient class -> http://paste.org/53413 有趣的事实是,如果我使用BitmapImage(新的Uri(“SITE”))它运作良好...(我不能这样做因为我想从该URL抓取cookie。图像是jpg.PostWebClient类- > http://paste.org/53413
This is the simplest code from Bitmap class documentation. 这是Bitmap类文档中最简单的代码。
System.Net.WebRequest request =
System.Net.WebRequest.Create(
"http://www.microsoft.com//h/en-us/r/ms_masthead_ltr.gif");
System.Net.WebResponse response = request.GetResponse();
System.IO.Stream responseStream =
response.GetResponseStream();
Bitmap bitmap2 = new Bitmap(responseStream);
The easiest way is to open a network stream via a WebClient instance and pass it to the constructor of the Bitmap class: 最简单的方法是通过WebClient实例打开网络流并将其传递给Bitmap类的构造函数 :
using (WebClient wc = new WebClient())
{
using (Stream s = wc.OpenRead("http://hell.com/leaders/cthulhu.jpg"))
{
using (Bitmap bmp = new Bitmap(s))
{
bmp.Save("C:\\temp\\octopus.jpg");
}
}
}
You can try below code: 你可以尝试下面的代码:
private Bitmap LoadPicture(string url)
{
HttpWebRequest wreq;
HttpWebResponse wresp;
Stream mystream;
Bitmap bmp;
bmp = null;
mystream = null;
wresp = null;
try
{
wreq = (HttpWebRequest)WebRequest.Create(url);
wreq.AllowWriteStreamBuffering = true;
wresp = (HttpWebResponse)wreq.GetResponse();
if ((mystream = wresp.GetResponseStream()) != null)
bmp = new Bitmap(mystream);
}
finally
{
if (mystream != null)
mystream.Close();
if (wresp != null)
wresp.Close();
}
return (bmp);
}
try this: 试试这个:
string url ="http://www.google.ru/images/srpr/logo11w.png"
PictureBox picbox = new PictureBox();
picbox.Load(url);
Bitmap bitmapRemote = (Bitmap) picbox.Image;
url - internet image , we create new instance object PictureBox, then calling NOT ASYNC procedure to load image from url, when image retrieved get image as bitmap. url - internet image,我们创建新的实例对象PictureBox,然后调用NOT ASYNC过程从url加载图像,当检索到的图像将图像作为位图时。 Also you can use Threading to work with form, call load in other thread and pass deleate method to retrieve image when complete . 您还可以使用线程处理表单,在其他线程中调用load,并在完成时通过deleate方法检索图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.