我动态构建了一个大小为 4022(宽度)x 3779(宽度)的图表的相对布局。然而,该图表仅包含 50-100 个文本视图,因此结果 .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();
}
LogCat 输出:
原始宽度:4022,原始高度:3779
当“scale_ratio”为 2 时,成功保存图表的左上角四分之一。文件大小只有 22k。当“scale_ratio”为 1 时,应用程序由于“createBitmap”行的内存不足而崩溃:
java.lang.OutOfMemoryError:位图大小超出 VM 预算
有什么好方法可以保存整个图表吗?非常感谢您的帮助!!!
更新:我通过将 Emulator VM 堆大小增加 10 倍来解决了这个问题。现在我有一个完整的图表。