首页 > 解决方案 > 如何将 BitmapImage 转换为 StorageFile?

问题描述

在拖放图像时,我需要将 BitmapImage 转换为 StorageFile 以上传它。

       DataPackageView dataPackageView = Clipboard.GetContent();
       if (dataPackageView.Contains(StandardDataFormats.Bitmap))
       {
                    RandomAccessStreamReference img = await dataPackageView.GetBitmapAsync();
                    var imgstream = await img.OpenReadAsync();
                    BitmapImage bitmap = new BitmapImage();
                    bitmap.SetSource(imgstream);
                    StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(bitmap.UriSource.ToString()));

                    IUploadFileModel   _uploadModel = ObjFactory.Instance.CreateUploadFileModel();
                  _uploadModel.UploadFileAsync(file, user, OpenChatData.TeamID.ToString(), _isReadReceiptEnabled);
           }

标签: bitmapdrag-and-dropstorageclipboarduwp-xaml

解决方案


从剪贴板获取的数据不必转换为BitmapImage,直接对RandomAccessStreamReference获取的数据进行操作,保存到本地文件,上传文件即可

var data = Clipboard.GetContent();
if (data.Contains(StandardDataFormats.Bitmap))
{
    var img = await data.GetBitmapAsync();
    var imgstream = await img.OpenReadAsync();
    string type = imgstream.ContentType;
    string extension = type.Replace("image/", "");
    var file = await ApplicationData.Current.LocalFolder.CreateFileAsync($"temp.{extension}", CreationCollisionOption.ReplaceExisting);
    byte[] buffer = new byte[imgstream.Size];
    await imgstream.ReadAsync(buffer.AsBuffer(), (uint)imgstream.Size, InputStreamOptions.None);
    await FileIO.WriteBytesAsync(file, buffer);
    // upload file
}

谢谢。


推荐阅读