마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

두번째 캡쳐시 아웃오브메모리가 발생합니다.

0 추천

 

 

첫번째 캡쳐시 잘 작동합니다.
그런데 뒤로가서 다른 캡쳐 이미지를 작성하고나서 돌아와 두번쨰 캡쳐를 하면 이런 에러가 납니다.
 
 
 
10-07 23:59:53.846: E/AndroidRuntime(4391): FATAL EXCEPTION: main
10-07 23:59:53.846: E/AndroidRuntime(4391): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.graphics.Bitmap.nativeCreate(Native Method)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.graphics.Bitmap.createBitmap(Bitmap.java:498)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at com.yonoo.test.ResultActivity.onClick(ResultActivity.java:823)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.view.View.performClick(View.java:2408)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.view.View$PerformClick.run(View.java:8824)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.os.Handler.handleCallback(Handler.java:587)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.os.Handler.dispatchMessage(Handler.java:92)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.os.Looper.loop(Looper.java:143)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at android.app.ActivityThread.main(ActivityThread.java:4732)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at java.lang.reflect.Method.invokeNative(Native Method)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at java.lang.reflect.Method.invoke(Method.java:521)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-07 23:59:53.846: E/AndroidRuntime(4391):  at dalvik.system.NativeStart.main(Native Method)
 
 
 
현재 캡쳐 부분은 이렇습니다.
container.buildDrawingCache(true);
Bitmap captureView = Bitmap.createBitmap(width_container, 
height_container, Bitmap.Config.ARGB_8888);  //에러부분
Canvas screenShotCanvas = new Canvas(captureView); 
container.draw(screenShotCanvas); 
 
setdrawingcache인가 겟드로잉캐시 메모리 해제? 그런게 있어야 하나요?
 
false로 주고 넣어도 봣는데 같은 현상이 발생합니다.
 

 

브루스웨인 (8,580 포인트) 님이 2013년 10월 8일 질문

2개의 답변

0 추천
 
채택된 답변
Picture picture = view.capturePicture();

Bitmap saveAllScreenShot = Bitmap.createBitmap(picture.getWidth(), picture.getHeight(), Bitmap.Config.ARGB_8888);
  Canvas c= new Canvas(saveAllScreenShot);
  if(c != null) {
   picture.draw(c);
  }

 

이방법을 한번 써보도록 해보세요.
싸만코 (2,260 포인트) 님이 2013년 10월 8일 답변
브루스웨인님이 2013년 10월 9일 채택됨
Picture picture = view.capturePicture();

여기서 저는 view 가 아니라 프레임레이아웃입니다.
그럼 이방법은 쓸 수가 없나요?
이렇게 했는데 똑같은 현상이 나타납니다.

container = (FrameLayout)findViewById(R.id.main_container);
Bitmap captureView = Bitmap.createBitmap(width_container,
                    height_container, Bitmap.Config.ARGB_8888);
            Canvas screenShotCanvas = new Canvas(captureView);
            if(screenShotCanvas != null){
                container.draw(screenShotCanvas);
            }
0 추천
건방진프로그래머 (26,630 포인트) 님이 2013년 10월 8일 답변
보편적인 캡쳐방법이 링크에 나온 방법이더라구요. 그런데 저는 그게 안되가지고 겨우찾은게 지금의 방법입니다..
저는 잘됩니다만~.......
답변 감사합니다. 저도 이상한게 다 잘된다고들 합니다. 예제파일도 저런형식이었는데 잘 됐구요. 근데 제 프로젝트에서 하면 안됩니다 ㅠㅠ
...