use*_*821 5 java android bitmap
我正在开发一个相当简单的应用程序.该应用程序底层有以下代码:
...
mRootContentView = getWindow().getDecorView().findViewById(android.R.id.content));
int[] screenDimensions = AndroidUtils.getScreenDimesions(getContext());
bitmap = Bitmap.createBitmap(screenDimensions[0], screenDimensions[1], Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
mRootContentView.layout(0, 0, screenDimensions[0], screenDimensions[1]);
mRootContentView.draw(c);
...
Run Code Online (Sandbox Code Playgroud)
毫无疑问,您已经猜到了,它获得了整个当前活动的"屏幕截图".
在android v 4.4.2(KitKat)发布之后,我在ACRA报告中遇到了一个奇怪的异常,告诉我:
java.lang.IllegalArgumentException: bitmap size exceeds 32bits
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:809)
at android.graphics.Bitmap.createBitmap(Bitmap.java:769)
at android.view.View.buildDrawingCache(View.java:13608)
at android.view.View.draw(View.java:14154)
at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
at net.simonvt.menudrawer.MenuDrawer.dispatchDraw(MenuDrawer.java:665)
at android.view.View.draw(View.java:14468)
at android.view.View.draw(View.java:14350)
at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
at android.view.View.draw(View.java:14468)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
. . .
Run Code Online (Sandbox Code Playgroud)
此异常仅在KitKat设备上引发,例如nexus 7和nexus 5.
编辑
我也试过这个:
mRootContentView.setDrawingCacheEnabled(true);
mRootContentView.buildDrawingCache();
bitmap = mRootContentView.getDrawingCache();
Run Code Online (Sandbox Code Playgroud)
什么都没有改变.
小智 0
看起来您的异常是从GraphicsJNI::allocateJavaPixelRef引发的。正如您可能已经猜到的那样,当位图的大小总共超过 32 位时,就会引发异常。
由于您仅获得可能不需要 Alpha 通道的“屏幕截图”,您是否考虑过尝试Bitmap.Config.RGB565而不是RGBA8888?不过,我不确定它是否能防止所有崩溃。
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |