我使用mapsui在我的应用程序上显示一个IGN地图,当我点击一个特定的按钮时,我想制作一个地图的屏幕截图。所以我使用依赖注入,它在UWP上工作得很好。但使用安卓系统时,我无法显示地图,而且屏幕是白色的。下面是我的Android代码:
public Task<byte[]> TakeShot()
{
var _activity = CrossCurrentActivity.Current;
if (_activity == null)
{
throw new Exception("You have to set ScreenshotManager.Activity in your Android project");
}
var view = _activity.Activity.Window.DecorView;
view.DrawingCacheEnabled = true;
Bitmap bitmap = view.GetDrawingCache(true);
view.BuildDrawingCache();
byte[] bitmapData;
using (var stream = new MemoryStream())
{
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
bitmapData = stream.ToArray();
}
return Task.FromResult(bitmapData);
}只有地图是空白的,因为我在图像上有我的按钮。感谢你的帮助
发布于 2019-11-19 10:53:56
我使用了Mapsui,然后我创建了一个依赖服务的截图函数,这是我截图时的GIF。

这是我关于实现截图的依赖服务。
[assembly: Dependency(typeof(ScreenshotService))]
namespace MVVMDataBinding.Droid
{
public class ScreenshotService : IScreenshotService
{
public byte[] Capture()
{
var _activity = CrossCurrentActivity.Current;
var rootView = _activity.Activity.Window.DecorView;
using (var screenshot = Bitmap.CreateBitmap(
rootView.Width,
rootView.Height,
Bitmap.Config.Argb8888))
{
var canvas = new Canvas(screenshot);
rootView.Draw(canvas);
using (var stream = new MemoryStream())
{
screenshot.Compress(Bitmap.CompressFormat.Png, 90, stream);
return stream.ToArray();
}
}
}
}
}并在xamarin窗体中创建一个接口IScreenshotService。
public interface IScreenshotService
{
byte[] Capture();
}在xamarin形式中使用它。
private void Button_Clicked(object sender, EventArgs e)
{
var screenshotData = DependencyService.Get<IScreenshotService>().Capture();
myImage.Source=ImageSource.FromStream(() => new
MemoryStream((byte[])screenshotData));
}forground代码。
<ContentPage.Content>
<StackLayout>
<Grid x:Name="ContentGrid" WidthRequest="100" HeightRequest="200" />
<Button Text="Take a screen" Clicked="Button_Clicked"/>
<Image x:Name="myImage" WidthRequest="200" HeightRequest="300"/>
</StackLayout>
</ContentPage.Content>这是我的演示。
https://stackoverflow.com/questions/58915863
复制相似问题