将图形转换为RGB_565时出现RuntimeException

时间:2017-06-27 21:01:14

标签: android bitmap runtimeexception

我的Google Play控制台偶尔会出现我的游戏崩溃报告,我发现很难修复。这是相对罕见的,但它是迄今为止一些一星评价的原因。

这个代码运行良好的数千次,它很少会导致致命的错误(它在启动时会立即为用户崩溃)。它没有告诉我throwIfCannotDraw跳出来的原因。

任何帮助都非常感谢!

编辑:我认为这可能是一个时间问题,因为它是在启动时,其他线程正在加载 - 加载/初始化广告网络,分析,Google Play服务等。任何人都有这方面的经验吗?

    java.lang.RuntimeException: 
      at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1301)
      at android.graphics.Canvas.drawBitmap(Canvas.java:1356)

以下是导致崩溃的前几个设备:

Galaxy Tab Pro 12.2 (v2wifi)        6   14.0%
Galaxy Tab Pro 10.1 (picassowifi)   5   11.6%
Galaxy Tap Pro 8.4 (mondrianwifi)   4   9.3%
Galaxy Note 10.1 (lt033g)       3   7.0%
Galaxy TabS 8.4 (klimtwifi)     3   7.0%
Galaxy S7 Edge (hero2lte)       3   7.0%
Zmax Pro (urd)              2   4.7%
Galaxy Note5 (noblelte)         2   4.7%

Android版本似乎不是原因:

Android 5.1 14  32.6%
Android 7.0 12  27.9%
Android 4.4 7   16.3%
Android 6.0 6   14.0%

代码:

bitmapTMP1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.map_charset);

bitmapTMP2 = Bitmap.createScaledBitmap(bitmapTMP1,
        (int) (MAP_CHARSET_SX * scaleFactor),
        (int) (MAP_CHARSET_SY * scaleFactor),
        false);

bitmapTMP1.recycle();

bitmapMapCharset = Bitmap.createBitmap( bitmapTMP2.getWidth(), bitmapTMP2.getHeight(), Bitmap.Config.RGB_565 );

Canvas c = new Canvas();
c.setBitmap(bitmapMapCharset);

c.drawBitmap(bitmapTMP2,0,0,null); //HERE - Causes RuntimeException sometimes 

bitmapTMP2.recycle();

1 个答案:

答案 0 :(得分:0)

找到它。问题是scaleFactor = 1(发生在非常大的平板电脑上)。即没有扩展,文档说:

  

如果指定的宽度和高度与当前宽度相同   和源位图的高度,返回源位图,没有   新位图已创建。

所以当我回收我认为的源位图时( bitmapTMP1.recycle();),我实际上正在回收我继续使用的位图。

不确定为什么Logcat RuntimeException不包含“尝试使用循环位图”。这会有所帮助......