bitmap - 如何将 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);
}
解决方案
从剪贴板获取的数据不必转换为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
}
谢谢。
推荐阅读
- sql - Group BY 语句错误以获取唯一记录
- docker - 运行 DockerFile 时找不到文件异常
- c# - C#如何用另一个点击事件终止一个点击事件处理程序
- android - 传入的语音未在 Android 中录制
- javascript - 分页没有在页面刷新时初始化,整个页面光滑库中的多个滑块
- sql - Select data where condition matches and if none, then select all?
- windows - 如何使python命令行参数在新行中继续
- c# - 如何从.net核心中的json文件中读取复杂对象
- vba - ADO 错误 没有足够的内存资源来完成此操作
- android - Volley 解析 Json 对象,文件发送字符串到服务器