티스토리 뷰
[Tip] View 으로로부터 Bitmap 가져오기 :: getDrawingCache 를 호출했을 때 발생하는 문제 해결.
snoworca 2015. 5. 8. 19:31// SDK 22 기준.
view.setDrawingCacheEnabled(true);// 임의로 measure 와 layout 을 호출한다.
//view.measure(View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY),
// View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.EXACTLY));
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
// 알파값을 갖는다면 어떤 옵션을 줘도 ARGB_8888 (32비트) 비트맵으로 반환되며,
// 알파값을 갖지 않는다면 어떤 옵션을 줘도 RGB_565 (16비트) 의 비트맵으로 반환한다 (;;;)
// 게다가 호출하는 즉시 캐쉬 비트맵이 recycle 된다.
//view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_AUTO);
Bitmap cache = view.getDrawingCache(true);
if(cache != null) {
Bitmap cachedBitmap = Bitmap.createBitmap(cache);
}view.setDrawingCacheEnabled(false);
보통은 위와 같은 방법으로 호출하면 View 의 bitmap 캐쉬를 무사히 가져올 수 있다.
하지만 이 방법을 사용했을 때, setDrawingCacheQuality 옵션을 LOW 로 줘도 ARGB_8888또는 RGB_565 이 반환된다.
View 의 getDrawingCache 내부에 퀄리티 관련 옵션값을 처리하는 부분에 다음과 같은 주석이 있다.
// Never pick ARGB_4444 because it looks awful
그래도 ARGB_4444 를 사용하고 싶다면 다음과 같이 처리하면 된다.
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
canvas.translate(view.getScrollX(), view.getScaleY());
canvas.drawARGB(0, 0, 0, 0);
view.draw(canvas);
'개발 관련 > Android ' 카테고리의 다른 글
ActivityLifecycleCallbacks 를 이용하여 실행중인 Activity 상태와 객체 가져오기. (2) | 2015.04.09 |
---|---|
NDK 를 이용하여 Signaiture (서명) 값 가져오기. (5) | 2015.04.08 |
안드로이드 APK 서명에 대하여 + java 코드상에서 APK 파일로부터 인증서 정보 가져오기. (3) | 2015.03.25 |
안드로이드 바이너리 XML 의 구조. (0) | 2015.03.23 |
Android NDK, JNI 내부에서 HTTP 통신 사용하기. (0) | 2015.03.20 |
- Total
- Today
- Yesterday
- arduino
- NeoPixel
- activity
- 개발
- ESP8266
- ATtiny85
- Java
- noidemcu
- bluetooth
- Android
- 병렬 프로그래밍
- Iot
- 가습기
- 이더넷
- WS2812B
- Cheapduino
- HC-06
- 부트로더
- 안드로이드 개발
- 안드로이드
- ENC28J60
- 침블락
- json
- 스마트 무드등
- 칩두이노
- oled
- ndk
- 알리익스프레스
- 블루투스
- 아두이노
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |