我正在尝试开发一个简单的 Windows 8 Metro 应用程序,它只需从给定的 URL(例如http://sample.com/foo.jpg)下载图像文件,然后将其保存到图片库。
我在 UI 中有一个图像控件来显示下载的图像。我在将图像控件的图像源设置为新下载的图像时也遇到了困难(实际上我什至无法下载它)。
此外,是否可以将图像文件存储在图片库中的特定文件夹中(如果它不存在,则应用程序应该创建它)?
我真的被困在这里了。
请帮我。
我正在尝试开发一个简单的 Windows 8 Metro 应用程序,它只需从给定的 URL(例如http://sample.com/foo.jpg)下载图像文件,然后将其保存到图片库。
我在 UI 中有一个图像控件来显示下载的图像。我在将图像控件的图像源设置为新下载的图像时也遇到了困难(实际上我什至无法下载它)。
此外,是否可以将图像文件存储在图片库中的特定文件夹中(如果它不存在,则应用程序应该创建它)?
我真的被困在这里了。
请帮我。
这是一些粗略的代码,我相信它们可以实现您想要的。它假定您有两个图像控件(Image1 和 Image2),并且您在清单中检查了图片库功能。还可以查看XAML 图像示例
Uri uri = new Uri("http://www.picsimages.net/photo/lebron-james/lebron-james_1312647633.jpg");
var fileName = Guid.NewGuid().ToString() + ".jpg";
// download pic
var bitmapImage = new BitmapImage();
var httpClient = new HttpClient();
var httpResponse = await httpClient.GetAsync(uri);
byte[] b = await httpResponse.Content.ReadAsByteArrayAsync();
// create a new in memory stream and datawriter
using (var stream = new InMemoryRandomAccessStream())
{
using (DataWriter dw = new DataWriter(stream))
{
// write the raw bytes and store
dw.WriteBytes(b);
await dw.StoreAsync();
// set the image source
stream.Seek(0);
bitmapImage.SetSource(stream);
// set image in first control
Image1.Source = bitmapImage;
// write to pictures library
var storageFile = await KnownFolders.PicturesLibrary.CreateFileAsync(
fileName,
CreationCollisionOption.ReplaceExisting);
using (var storageStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite))
{
await RandomAccessStream.CopyAndCloseAsync(stream.GetInputStreamAt(0), storageStream.GetOutputStreamAt(0));
}
}
}
// read from pictures library
var pictureFile = await KnownFolders.PicturesLibrary.GetFileAsync(fileName);
using ( var pictureStream = await pictureFile.OpenAsync(FileAccessMode.Read) )
{
bitmapImage.SetSource(pictureStream);
}
Image2.Source = bitmapImage;
}