最终,我的目标是将从远程服务器通过http获取的图像保存到本地存储。
我这样读了
BitmapImage^ im = ref new BitmapImage();
im->CreateOptions = BitmapCreateOptions::IgnoreImageCache;
im->DownloadProgress += ref new DownloadProgressEventHandler(this, &Capture::ShowDownloadProgress);
im->ImageOpened += ref new RoutedEventHandler(this, &Capture::ImageDownloaded);
im->UriSource = ref new Uri(URL);
触发ImageDownloaded
时,我希望能够将图像另存为.jpg文件。我已经拥有目标文件夹的写权限。
我找到了将图像读入WriteableBitmap
的方法,但构造函数需要宽度和高度......但在获取图像之前我不知道这一点。
我可以用什么方法来... ...
1.以有用的格式获取图像数据,以便将其写入磁盘?
2.在Xaml图像UIelement中显示它?
3.为DownloadProgress
和ImageOpened
或downloaded
提供回调?
我无法相信这是多么棘手。
答案 0 :(得分:1)
"可写"在WritableBitmap中,它指的是它是可编辑的(它不是可写入磁盘)。
为了将下载的图像文件写入磁盘,您不需要BitmapImage或WritableBitmap,您只需下载流并将其直接写入磁盘即可。然后,您还可以从同一个流创建一个BitmapImage,以便在XAML Image元素中显示它。
// download image and write to disk
Uri uri = new Uri("https://assets.onestore.ms/cdnfiles/external/uhf/long/9a49a7e9d8e881327e81b9eb43dabc01de70a9bb/images/microsoft-gray.png");
StorageFile file = await StorageFile.CreateStreamedFileFromUriAsync("microsoft-gray.png", uri, null);
await file.CopyAsync(ApplicationData.Current.LocalFolder, "microsoft-gray.png", NameCollisionOption.ReplaceExisting);
// create a bitmapimage and display in XAML
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
BitmapImage bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
imageElement.Source = bitmap;