Bitmap too large to be uploaded into a texture


最近在做項目的時候遇到了這么個異常:

Bitmap too large to be uploaded into a texture

不難看出字面上的意思就是你這個Bitmap太大了,Android小妾做不到給你渲染上去哈。

我們來看看根本原因,由於項目的需要在Webview中來播放視頻,所以在Activity層我開啟了硬件加速,這帶來了得問題就是我的Bitmap的圖層超出了GPU對於openglRender的限制值,這個不同的手機會有不同的限制。

上網查資料發現有的朋友說,這個限制值可以通過canvas.getMaximumBitmapHeight()和canvas.getMaximumBitmapWidth()來獲得。

但是我發現這種方式並沒有拿到真正的限制值。

首先來給大家看看我的異常信息:

08-17 15:41:02.815: W/OpenGLRenderer(19967): Bitmap too large to be uploaded into a texture (2160x7332, max=4096x4096)

不難看出我的限制值是4096X4096,但是我通過canvas.getMaximumBitmapHeight()和canvas.getMaximumBitmapWidth()這兩個方法拿到的限制值是三萬多,顯然不正確。

后來查資料,我的解決方案如下:

第一步:拿到本設備的GPU對於openglRender的限制值

    //added by Jack for handle exception "Bitmap too large to be uploaded into a texture".
    public boolean isNeedCloseHardwareAcceleration(int w, int h) {
        int[] maxSize = new int[1];
        GLES10.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0);

        if(maxSize[0] < h || maxSize[0] < w) {
            return true;
        }

        return false;
    }

第二步:在你初始化視圖的時候判斷一下你的Bitmap的長寬是否超出了這個值,選擇關閉硬件加速。當然你也可以分片來繪圖。

至於如何開啟、關閉、判斷是否有硬件加速大家可以看看以下博文,這里我就不做介紹了。

http://www.cnblogs.com/frydsh/archive/2012/10/23/2733581.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM