0

我的 C# 程序需要一次显示许多可能的图像。这些图像在网络上,我为每一个都有一个精确的 URL。程序需要从网络加载图像,或者,如果之前已经加载过,从内存/文件加载它(因为之前从网络加载应该已经将它保存到内存/文件)。我该如何实施?我可以使用 WebRequest 对象从 Web 获取加载,但这还不足以保存它以供以后更快地使用。

WebRequest request = WebRequest.Create(imageURL);
Stream stream = request.GetResponse().GetResponseStream();
pictureBoxFirstPack.Image = Image.FromStream(stream);
4

3 回答 3

1

我很确定你应该能够做到这一点:

 MemoryStream ms = new MemoryStream();
 stream.CopyTo(ms);
 Byte[]  data = ms.ToArray();

一旦你将它作为一个字节数组,你可以将它存储在字典、数据库或任何你真正喜欢的地方。

于 2012-07-11T23:40:47.663 回答
0

使用 Image.Save 方法保存下载的图像(遵循 MSDN 中的示例:http: //msdn.microsoft.com/en-us/library/9t4syfhh.aspx

// Construct a bitmap from the button image resource.
Bitmap bmp1 = new Bitmap(typeof(Button), "Button.bmp");

// Save the image as a GIF.
bmp1.Save("c:\\button.gif", System.Drawing.Imaging.ImageFormat.Gif);

检查图像是否已存在于本地存储中的一种可能方法是计算每个下载图像的哈希和并将其保存在字典中

SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
var hash = BitConverter.ToString(checksum).Replace("-", String.Empty);
// Store hash into a dictionary
于 2012-07-11T23:41:53.217 回答
0

您可以使用 WebClient 下载文件,如下所示:

string fileNameLocally = @"c:\file.jpg";
using(WebClient client = new WebClient())
{
        client.DownloadFile(imageURL, fileNameLocally);
//you can also use DownloadAsyncFile this methods do not block the calling thread.
}
于 2012-07-11T23:44:20.393 回答