2

我动态构建了一个大小为 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 倍来解决了这个问题。现在我有一个完整的图表。

4

1 回答 1

0

我通过将 Emulator VM 堆大小增加 10 倍解决了这个问题。现在我有一个完整的图表。

于 2012-05-16T14:17:32.420 回答