Bitmap too large to be uploaded into a texture (440x2302, max=2048x2048)
从Android3.0 (API level 11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作。硬件加速是个好东西,可以让ListView、WebView滑动的更流畅,但是也总是会出现莫名其妙的的问题。问题1:EditText中文字的重叠在某些4.x的机器中,如果打开了硬件加速,EditText会出现奇怪的文字重叠的情况。出现原因:JellyBean的硬件加速bug,在此我们关掉硬件加速即可。
解决方案:在EditText中加入一句:
android:layerType="software"
问题2:图片无法显示
做的程序里有的时候会需要加载大图,但是硬件加速中 OpenGL对于内存是有限制的。如果遇到了这个限制,LogCat只会报一个Warning:
Bitmap too large to be uploaded into a texture (587x7696, max=2048x2048)
<activityandroid:name = "icyfox.webviewimagezoomertest.MainActivity"android:label = "@string/app_name"android:hardwareAccelerated = "false" />
简单说就是硬件加速的时候,对图片的大小有限制。不同设备可能有不同的最大值。这个问题悲催的地方是,程序貌似没有捕获到这个exception, 结果是程序也不报错,图片也显示不出来。只有看debug log才能发现这个error message.
比较好的解决方法是类似google map的实现:将图片分成不同的块,每次加载需要的块。android提供了一个方法:
http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html
1 | public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint) |
2 |
3 | public Bitmap decodeRegion (Rect rect, BitmapFactory.Options options) |
采取上述操作后,就可以加载很多图片,同时也可以显示超级大图了。