gpt4 book ai didi

silverlight - 使用 httpwebrequest 从网站获取图像到字节 []

转载 作者:行者123 更新时间:2023-11-30 23:59:51 25 4
gpt4 key购买 nike

我想在网站上读取 PNG 文件的原始二进制文件并将其存储到一个字节 [] 中,到目前为止我有这样的事情:

            Uri imageUri = new Uri("http://www.example.com/image.png");
// Create a HttpWebrequest object to the desired URL.
HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imageUri);
using (HttpWebResponse imgResponse = (HttpWebResponse)imgRequest.GetResponse())
{
using (BinaryReader lxBR = new BinaryReader(imgResponse.GetResponseStream()))
{
using (MemoryStream lxMS = new MemoryStream())
{
lnBuffer = lxBR.ReadBytes(1024);
while (lnBuffer.Length > 0)
{
lxMS.Write(lnBuffer, 0, lnBuffer.Length);
lnBuffer = lxBR.ReadBytes(1024);
}
lnFile = new byte[(int)lxMS.Length];
lxMS.Position = 0;
lxMS.Read(lnFile, 0, lnFile.Length);
}
}
}

但我不能使用 GetResponse在 Silverlight 上,因为它不是异步的(我认为这就是原因)所以我应该使用 BeginGetResponse ,但我并不完全清楚如何去做。这是我到目前为止:
                HttpWebResponse imgResponse = (HttpWebResponse)imgRequest.BeginGetResponse(new AsyncCallback(WebComplete), imgRequest);

using (imgResponse)
{
using (BinaryReader lxBR = new BinaryReader(imgResponse.GetResponseStream()))
{
/*Same*/
}
}


        void WebComplete(IAsyncResult a)
{
HttpWebRequest req = (HttpWebRequest)a.AsyncState;
HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(a);
//...? Do I need something else here?
}

有人可以向我解释一下如何使用 BeginGetResponse属性以及如何使用 AsyncCallback。
谢谢!

笔记:
我是 Silverlight 的新手,我一直在关注教程并从 StackOverflow 上的其他回复中借鉴:
(stackoverflow responce) what I need to do but not in silverlight

tutorial

WebRequest_in_Silverlight

这是有效的 Silverlight 代码吗?
HttpWebResponse imgResponse = (HttpWebResponse)imgRequest.BeginGetResponse(new AsyncCallback(WebComplete), imgRequest);

最佳答案

搞定了,想把它贴在这里以防有人需要它。

我需要得到这个图像然后修改它(字节级别)Silverlight没有让我将图像直接保存到 WriteableBitmap因此我必须使用 WebClient 作为流获取图像,然后将其保存到 byte[]
这就是我获得图像的方式(我已经有了特定的 Uri):

 WebClient wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(uri)

所以当图像加载时 wc_OpenReadCompleted方法被调用,它做这样的事情:
int lengthInBytes = Convert.ToInt32(e.Result.Length);
BinaryReader br = new BinaryReader(e.Result);

byte[] buffer = new byte[lengthInBytes];
using (br)
{
for (int i = 0; i < lengthInBytes; i++)
{
buffer[i] = br.ReadByte();
}
}

最后是 buffer[]拥有图像的所有字节(我想要的)
我相信有更好的方法可以做到这一点,但这对我有用! )

注意:在某些时候,我需要将 byte[] 转换为 BitmapImage(这比预期的要容易):
        //imageInBytes is a byte[]

if (imageInBytes != null)
{
MemoryStream rawBytesStream = new MemoryStream(imageInBytes);
BitmapImage img = new BitmapImage();
img.SetSource(rawBytesStream);
return img;
}

我希望这可以帮助任何人。

关于silverlight - 使用 httpwebrequest 从网站获取图像到字节 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com