1. 程式人生 > >OpenGLRenderer: Bitmap too large to be uploaded into a texture 的原因簡析

OpenGLRenderer: Bitmap too large to be uploaded into a texture 的原因簡析

根本原因:

使用硬體加速沉浸,圖片太大(生成對應的Bimmap size太大),生成GPU處理的紋理失敗(不允許生成)

解決方案:

1.換張小size的圖片(當圖片是本杝的,用來當背景圖這類)
2.使用第三方圖片庫,對圖片使用縮壓處理

View的渲染與OpenGLRenderer的關係

ImageView或其它View的子類的渲染是使用了android.graphics.Canvas

android.graphics.Canvas 是一個 2D 圖形 API,而且是最受開發者群體青睞的圖形 API。Canvas 運算可在 Android 中繪製所有原生和自定義 android.view.View。在 Android 中,Canvas API 通過一個名為 OpenGLRenderer 的繪製庫實現硬體加速,該繪製庫將 Canvas 運算轉換為 OpenGL 運算,以便它們可以在 GPU 上執行。
從 Android 4.0 開始,硬體加速的 Canvas 預設情況下處於啟用狀態。因此,支援 OpenGL ES 2.0 的硬體 GPU 對於 Android 4.0 及更高版本的裝置來說是強制要求

綜上所示,如果圖片太大,OpenGLRenderer把Bitmap轉成textrue(紋理)會失敗,從而對應的圖片沉浸不出來。

注:可以簡單做一下實驗,當把APP的硬體加速關閉,使用純軟體渲染,圖片就可以顯示出來了

AndroidManifest.xml的<Application 節點,新增      android:hardwareAccelerated="false"即可,關閉硬體加速

參考資料