android - 创建 Osmdroid Mapview 的屏幕截图

标签 android bitmap screenshot osmdroid

我想创建 Osmdroid MapView (mymapView) 的屏幕截图。我这样做:

Bitmap bitmap=mymapView.getDrawingCache().copy(Bitmap.Config.RGB_565, true);

我收到这个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.Bitmap.copy(android.graphics.Bitmap$Config, boolean)' on a null object reference

我认为这是因为当我尝试创建位图时 MapView 还没有准备好。我想我必须为 Osmdroid 使用 GoogleMap.SnapshotReadyCallback 的等价物。 Osmdroid 是否有这样的类,或其他 merhod 来创建 Mapview 的屏幕截图?

最佳答案

Osmdroid 6.1.0 中引入了类似的功能。对应的类是MapSnapshot .
可以在这里找到它的示例用法:SampleMapSnapshot

一个简单的用法是这样的,这里的 pMapView 就是我们要快照的 Mapview。

final MapSnapshot mapSnapshot = new MapSnapshot(new MapSnapshot.MapSnapshotable() {
            @Override
            public void callback(final MapSnapshot pMapSnapshot) {
                if (pMapSnapshot.getStatus() != MapSnapshot.Status.CANVAS_OK) {
                    return;
                }
                final Bitmap bitmap = Bitmap.createBitmap(pMapSnapshot.getBitmap());
                // Do something with the bitmap like save to file
            }
        }, MapSnapshot.INCLUDE_FLAG_UPTODATE, pMapView);
new Thread(mapSnapshot).start();

注意:由于某些原因,如果您在 onCreate 期间直接调用它,会导致崩溃。否则它会按预期工作

引用:https://github.com/osmdroid/osmdroid/issues/1737

关于android - 创建 Osmdroid Mapview 的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694694/

相关文章:

c++ - 扫描 BitMap 以获取特定像素颜色,并在 C++ 中给出 x、y 位置

java - 无法插入图像。没有权限。尽管提供许可

ios - 我需要我没有的设备的 iOS 屏幕截图

java - 如何将 Android 应用程序连接到 MySql 数据库

android - 我可以在 Android Studio 中为选项菜单使用数据绑定(bind)吗?

Android位图形菱形

javascript - 用户捕获 div 作为图像并保存到计算机

camera - 截取 UIView 的屏幕截图,其中它的 subview 是相机 session

android - 如何正确使用 glDiscardFramebufferEXT

android - 接收隐式 Intent 的应用程序的身份?