imageview设置图片时超长超大图片超出限制(OpenGLRenderer: Bit
发布时间:2020-12-14 04:34:09 所属栏目:大数据 来源:网络整理
导读:问题:遇到超长图片,宽长等比缩放,比如宽度同屏幕同宽,长度等比放大,放到后遇到长度超出OpenGLRenderer的最大限制,导致图片无法显示出来: 解决办法: // 图片超出GPU对于openglRender最大限制缩放处理 if (height getOpenglRenderLimitValue()){ width
问题:遇到超长图片,宽长等比缩放,比如宽度同屏幕同宽,长度等比放大,放到后遇到长度超出OpenGLRenderer的最大限制,导致图片无法显示出来: 解决办法: //图片超出GPU对于openglRender最大限制缩放处理 if(height > getOpenglRenderLimitValue()){ width = width * getOpenglRenderLimitValue() / height; height = getOpenglRenderLimitValue(); } public static int getOpenglRenderLimitValue() { int maxsize ; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { maxsize = getGLESTextureLimitEqualAboveLollipop(); }else { maxsize = getOpenglRenderLimitBelowLollipop(); } return maxsize ==0 ? 4096 : maxsize; } private static int getOpenglRenderLimitBelowLollipop() { int[] maxSize =new int[1]; GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE,maxSize,0); return maxSize[0]; } private static int getGLESTextureLimitEqualAboveLollipop() { EGL10 egl = (EGL10) EGLContext.getEGL(); EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); int[] vers = new int[2]; egl.eglInitialize(dpy,vers); int[] configAttr = { EGL10.EGL_COLOR_BUFFER_TYPE,EGL10.EGL_RGB_BUFFER,EGL10.EGL_LEVEL,0,EGL10.EGL_SURFACE_TYPE,EGL10.EGL_PBUFFER_BIT,EGL10.EGL_NONE }; EGLConfig[] configs = new EGLConfig[1]; int[] numConfig = new int[1]; egl.eglChooseConfig(dpy,configAttr,configs,1,numConfig); if (numConfig[0] == 0) {// TROUBLE! No config found. } EGLConfig config = configs[0]; int[] surfAttr = { EGL10.EGL_WIDTH,64,EGL10.EGL_HEIGHT,EGL10.EGL_NONE }; EGLSurface surf = egl.eglCreatePbufferSurface(dpy,config,surfAttr); final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; // missing in EGL10 int[] ctxAttrib = { EGL_CONTEXT_CLIENT_VERSION,EGL10.EGL_NONE }; EGLContext ctx = egl.eglCreateContext(dpy,EGL10.EGL_NO_CONTEXT,ctxAttrib); egl.eglMakeCurrent(dpy,surf,ctx); int[] maxSize = new int[1]; GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE,0); egl.eglMakeCurrent(dpy,EGL10.EGL_NO_SURFACE,EGL10.EGL_NO_CONTEXT); egl.eglDestroySurface(dpy,surf); egl.eglDestroyContext(dpy,ctx); egl.eglTerminate(dpy); return maxSize[0]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |