Skobbler Android 3.0.1 requestScreenshot返回一个透明的空位图

时间:2017-07-21 05:09:30

标签: android bitmap opengl-es skmaps skobbler-maps

以前版本的Skobbler SDK允许开发人员通过调用类似

的内容来请求当前mapView状态的屏幕截图
@Override
public void onScreenshotReady(Bitmap bitmap) {
  // do something with passed bitmap
}

然后重写回调以侦听类似于:

的位图结果
mapView.requestScreenshot()

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

几乎就像位图已经使用具有正确宽度和高度的透明背景正确初始化但是当在内部进行渲染到位图的surfaceview请求时,该部分失败了。

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

查看日志,我在进行D/SKMapActivity: requesting screenshot E/libEGL: call to OpenGL ES API with no current context (logged once per thread) D/SKMapActivity: screenshot ready 调用和调用回调之间看到的唯一输出是这可能是相关的错误:

{{1}}

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

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

基思

1 个答案:

答案 0 :(得分: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);

`