将简单的大视图保存到位图

时间:2012-05-15 16:36:31

标签: android bitmap

我动态构建了大小为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();
    }

LogCat输出:

  

原始宽度:4022,原始高度:3779

当“scale_ratio”为2时,图表的左上角四分之一成功保存。文件大小只有22k。当“scale_ratio”为1时,应用程序因“createBitmap”行内存不足而崩溃:

  

java.lang.OutOfMemoryError:位图大小超过VM预算

有没有什么好方法可以保存整个图表?非常感谢您的帮助!!!

更新:我通过将仿真器VM堆大小增加10倍来解决此问题。现在我有一个完整的图表。

1 个答案:

答案 0 :(得分:0)

我通过将仿真器VM堆大小增加10倍来解决此问题。现在我有一张完整的图表。