UWP将BitmapImage转换为WriteableBitmap

时间:2017-09-10 20:11:42

标签: xaml uwp c++-cx

最终,我的目标是将从远程服务器通过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.为DownloadProgressImageOpeneddownloaded提供回调?

我无法相信这是多么棘手。

1 个答案:

答案 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;