首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android上使用Mapsui进行屏幕截图时出现白屏

在Android上使用Mapsui进行屏幕截图时出现白屏
EN

Stack Overflow用户
提问于 2019-11-18 21:37:17
回答 1查看 168关注 0票数 0

我使用mapsui在我的应用程序上显示一个IGN地图,当我点击一个特定的按钮时,我想制作一个地图的屏幕截图。所以我使用依赖注入,它在UWP上工作得很好。但使用安卓系统时,我无法显示地图,而且屏幕是白色的。下面是我的Android代码:

代码语言:javascript
复制
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);
    }

只有地图是空白的,因为我在图像上有我的按钮。感谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2019-11-19 10:53:56

我使用了Mapsui,然后我创建了一个依赖服务的截图函数,这是我截图时的GIF。

这是我关于实现截图的依赖服务。

代码语言:javascript
复制
[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

代码语言:javascript
复制
   public interface IScreenshotService
{
    byte[] Capture();
}

在xamarin形式中使用它。

代码语言:javascript
复制
private void Button_Clicked(object sender, EventArgs e)
    {
        var screenshotData = DependencyService.Get<IScreenshotService>().Capture();
        myImage.Source=ImageSource.FromStream(() => new 
        MemoryStream((byte[])screenshotData));
    }

forground代码。

代码语言:javascript
复制
  <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://github.com/851265601/MapsuiWithScreenshotDemo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58915863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档