1

Skobbler SDK 的早期版本允许开发人员通过调用类似的东西来请求当前 mapView 状态的屏幕截图

mapView.requestScreenshot();

然后重写一个回调来监听位图结果,类似于:

@Override
public void onScreenshotReady(Bitmap bitmap) {
  // do something with passed bitmap
}

此代码在 SDK 版本 2.5.1 中按预期工作,但沿线某处 SDK 似乎已更改,因此此代码不再工作。现在,当我们收到位图对象时,我们看到位图的尺寸与地图视图的尺寸相匹配,但内容都只是透明像素。

就好像位图已使用具有正确宽度和高度的透明背景正确初始化,但是当在内部发出渲染到位图的表面视图请求时,该部分失败。

一些额外的细节,调用mapView.requestScreenshot()是在主 UI 线程上进行的,回调的处理也是如此onScreenshotReady()

查看日志,我在requestScreenshot()调用和调用回调之间看到的唯一输出是这个可能相关的错误:

D/SKMapActivity: requesting screenshot
E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
D/SKMapActivity: screenshot ready

由于我不确定 SKMapSurfaceView 类如何请求渲染的内部结构,我不确定是否需要采取额外的步骤来确保在发出屏幕截图请求时当前的 OpenGL ES 上下文就位.

有人对此事有任何想法吗?谢谢!

基思

4

1 回答 1

1

您可以强制使用 openGL 2.0 版。类似的东西。

EGL10 mEgl = (EGL10) EGLContext.getEGL();
        int[] version = new int[2];
        EGLDisplay display = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
        boolean success = mEgl.eglInitialize(display, version);
        int EGL_OPENGL_ES2_BIT = 4;
        int[] configAttribs = {EGL10.EGL_RED_SIZE, 4, EGL10.EGL_GREEN_SIZE, 4, EGL10.EGL_BLUE_SIZE, 4, EGL10.EGL_RENDERABLE_TYPE,
                EGL_OPENGL_ES2_BIT, EGL10.EGL_NONE};

        EGLConfig[] configs = new EGLConfig[10];
        int[] num_config = new int[1];
        mEgl.eglChooseConfig(display, configAttribs, configs, 10, num_config);
        Log.d("OpenGL", "glversion: " + String.valueOf(success));
        EGLConfig eglConfig = this.mapView.chooseConfig(mEgl, display);

`

于 2017-07-26T21:14:41.163 回答