크기 4022 (너비) x 3779 (너비)의 차트의 상대적 레이아웃을 동적으로 만들었습니다. 그러나 차트는 50-100 Textviews만으로 구성되므로 결과 .png가 작습니다. 이것은 차트를 캡처하는 데 사용하는 간단한 코드입니다.간단한 큰보기를 비트 맵에 저장
// chart_container was built dynamically before calling this function:
public void saveBitmap(RelativeLayout chart_container) {
int scale_ratio = 2;
int chartWidth = chart_container.getWidth();
int chartHeight = chart_container.getHeight();
Log.i(TAG, "orignal width:" + chartWidth + ", original height: " + chartHeight);
Bitmap mBitmap = Bitmap.createBitmap(chartWidth/scale_ratio, chartHeight/scale_ratio, Bitmap.Config.ARGB_8888); // crashes when scale_ratio is 1
Canvas mCanvas = new Canvas(mBitmap);
chart_container.draw(mCanvas);
out = new FileOutputStream("/data/data/package/chart.jpeg");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
}
로그 캣 출력 :
orignal width:4022, original height: 3779
은 "scale_ratio는"2, 차트의 왼쪽 상단 분기가 성공적으로 저장됩니다. 파일 크기는 22k에 불과합니다. 은 "scale_ratio는"한 때, 그러나 앱은 라인 "createBitmap"로 인해 메모리가 충돌 : 전체 차트를 저장하는 좋은 방법은
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
있습니까? 당신의 도움은 대단히 감사합니다 !!!
업데이트 : 에뮬레이터 VM 힙 크기를 10 배 늘려서이 문제를 해결했습니다. 이제 완전한 차트를 얻었습니다.
안녕하세요, 문제를 해결해 주셨습니다. 문제가 해결되면 해답을 답변으로 게시하고 가능하면 수락하고 제목을 '해결됨'으로 변경하지 마세요. – MByD