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の場合、チャートの左上の4分の1が正常に保存されます。ファイルサイズはわずか22kです。「scale_ratio」が1の場合、「createBitmap」行のメモリ不足が原因でアプリがクラッシュします。

java.lang.OutOfMemoryError:ビットマップサイズがVMバジェットを超えています

チャート全体を保存する良い方法はありますか?あなたの助けは大歓迎です!!!

更新:エミュレーターVMのヒープサイズを10倍に増やすことで、この問題を解決しました。これで完全なチャートができました。

4

1 に答える 1

0

エミュレータVMのヒープサイズを10倍に増やすことで、この問題を解決しました。これで完全なチャートができました。

于 2012-05-16T14:17:32.420 に答える