c# - 无法将位图转换为字节 []
问题描述
所以我正在制作一个 Xamarin.Forms 应用程序。我有一个 StackLayout,我正在拍摄快照(只有元素,而不是整个屏幕。)
这是界面:
public interface IViewSnapShot
{
Task<byte[]> CaptureAsync(Xamarin.Forms.View view);
}
这是事件:
private async Task SavePic_ClickedAsync(object sender, EventArgs e)
{
var imageByte = await DependencyService.Get<IViewSnapShot>().CaptureAsync(BlueprintSnapshot);
}
这是特定于 Android 平台的:
public class MakeViewSnapshot : IViewSnapShot
{
Task<byte[]> IViewSnapShot.CaptureAsync(Xamarin.Forms.View view)
{
var nativeView = view.GetRenderer().View;
var wasDrawingCacheEnabled = nativeView.DrawingCacheEnabled;
nativeView.DrawingCacheEnabled = true;
nativeView.BuildDrawingCache(false);
Bitmap bitmap = nativeView.GetDrawingCache(false);
// TODO: Save bitmap and return filepath
nativeView.DrawingCacheEnabled = wasDrawingCacheEnabled;
byte[] bitmapData;
using (var stream = new MemoryStream())
{
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
bitmapData = stream.ToArray();
}
return bitmapData;
}
}
问题是bitmapData
给出错误
无法将类型“byte[]”隐式转换为“System.Threading.Tasks.Task”
我有搜索互联网,每篇文章都说这是将位图转换为字节 [] 数组的方法。知道如何解决此错误吗?
稍后我想将 byte[] 数组上传到 web api。
解决方案
byte[]
您可以使用Task.FromResult()将结果包装到 a中,而不是返回a Task
:
return Task.FromResult(bitmapData);
您的代码可能如下所示:
public class MakeViewSnapshot : IViewSnapShot
{
Task<byte[]> IViewSnapShot.CaptureAsync(Xamarin.Forms.View view)
{
var nativeView = view.GetRenderer().View;
var wasDrawingCacheEnabled = nativeView.DrawingCacheEnabled;
nativeView.DrawingCacheEnabled = true;
nativeView.BuildDrawingCache(false);
Bitmap bitmap = nativeView.GetDrawingCache(false);
// TODO: Save bitmap and return filepath
nativeView.DrawingCacheEnabled = wasDrawingCacheEnabled;
byte[] bitmapData;
using (var stream = new MemoryStream())
{
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
bitmapData = stream.ToArray();
}
return Task.FromResult(bitmapData);
}
}
然后当你想得到byte[]
返回时,CaptureAsync()
你只需要调用:
byte[] result = CaptureAsync(<Your_parameters>).Result;
推荐阅读
- django - 是否可以通过 Django 中的反向模型分配 OneToOneField?
- .net-core - 使用 dotnet publish 命令发布时无法排除 web.config 文件
- firebase - 在没有互联网连接的情况下使用 Firebase 模拟器
- python - 如何保持websocket打开
- python - 创建 pyLDAvis 的 ZipFile
- sql - 从 JOIN 表中返回一次结果
- dask - 将延迟对象中的 dask 系列添加到 dask 数据帧
- tinymce - TinyMCE 在设计模式下禁用链接导航
- sandbox - authorized.net 中 LIVE MODE 与 TEST MODE 之间的区别
- javascript - 检测 AMP 页面上的滚动方向并根据它显示或隐藏元素