2014-01-17 3 views
5

다소 간단한 응용 프로그램에서 작업하고 있습니다.KitKat 장치의 buildDrawingCache에서 "비트 맵 크기가 32 비트를 초과합니다"

당신은 의심의 여지가 이미 짐작했듯이
... 
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); 
... 

, 그것은 전체 현재 활동의 "스크린 샷"을 가져옵니다 응용 프로그램은 후드 아래에 다음 코드 조각이있다.

내 ACRA에 이상한 예외에 직면 한 4.4.2 (킷캣) realease 나에게이 이야기,보고 안드로이드 V 후 :

이 예외 만 킷캣 장치에서 발생합니다

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) 
. . . 
등을

: 넥서스 7과 넥서스 5

편집

으로 나는이 시도했다

mRootContentView.setDrawingCacheEnabled(true); 
mRootContentView.buildDrawingCache(); 
bitmap = mRootContentView.getDrawingCache(); 

변경되지 않았습니다.

+1

레이아웃 전에 측정해야합니다. –

답변

0

예외가 GraphicsJNI::allocateJavaPixelRef에서 발생했습니다. 비트 맵의 ​​크기가 총 32 비트를 초과하면 예외가 발생합니다.

아마도 알파 채널이 필요하지 않은 "스크린 샷"을 얻고 있기 때문에 RGBA8888이 아닌 Bitmap.Config.RGB565을 사용해 보셨습니까? 그러나 모든 충돌을 막을 지 확신 할 수 없습니다.

관련 문제