2012-04-30 4 views
2

저는 캔버스에 그림을 그리고 단순히 캔버스를 JPEG에 저장하려고합니다. 나는 일부 장치에서이 테스트를하고 ICS에서 작동하지 않는 것을 발견하고 나에게 나는 다음과 같은 코드를 시도 UnsupportedOperationException가 오류 제공 한 : setBitmap이 ICS에서 작동하지 않는 이유는 무엇입니까?

Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
canvas.setBitmap(bitmap); 

// Drawing to canvas here 

OutputStream stream = new FileOutputStream("/sdcard/test.jpg"); 
bitmap.compress(CompressFormat.JPEG, 100, stream); 
stream.close(); 

모든 onDraw는 방법으로 수행되고 오류입니다 canvas.setBitmap (비트 맵).

Droid X (2.3) 및 Tab 10.1 (3.1)에서는 정상적으로 작동하지만 ICS를 실행하면 Galaxy Nexus (4.0) 및 Tab 10.1에서는 실패합니다. 나는 정말로 단순한 무언가를 보는 것을 끝내고 있습니다. 나는이 밤을 위해 노력해 왔으며 진전이 없다. 어떤 아이디어라도 대단히 감사하겠습니다!

업데이트 : "강제로 GPU 렌더링"을 해제했는데 작동하는 것처럼 보입니다. 이렇게하는 더 좋은 방법이 있어야합니다.

답변

1

설정에서 "강제 GPU 렌더링"을 사용하지 않도록 설정하면 더 나은 방법 일지라도 문제가 해결되었습니다.

0

strict mode이 사용 가능하다는 것이 확실합니다. bitmap.compress 메서드는 파일 I/O를 수행하므로 엄격 모드는 주 스레드에서 이러한 작업을 수행하고 있다는 사실에 불만이 있습니다. 예를 들어 AsyncTask을 사용하여 백그라운드 스레드에서 압축 단계를 수행하십시오. 또는 UI에서 반응이없는 순간을 유발할 우려가 없다면 Strict 모드로 전환하십시오.

+0

글쎄, 내 설정에서 엄격 모드가 사용 중지되었습니다. AsyncTask에서이 작업을 시도했지만 비트 맵에 저장하기 위해 캔버스를 다시 그려야하므로 추측하고 있습니다. 누출 된 창 오류가 발생합니다. – Mark

관련 문제