1

Android カメラを使用して画像をキャプチャしていますが、カメラは 8 MP であるため、約 4 ~ 5 MB の jpeg 画像が取得されます。そこで、次のコードを使用して 1 MB まで圧縮しようとしました。

dataにはjpegの画像が含まれ、baosByteArrayOutputStreamタイプです。

while ( data.length > 1 * 1024  * 1024 )
{
    System.gc();
    Log.e(TAG,"Data size "+ (data.length/1024));
    bitmapData.compress(CompressFormat.JPEG, compressionRatio, baos);
    data = baos.toByteArray();
    Log.e(TAG,"Data size "+ (data.length/1024));
    compressionRatio -= 5 ;
}

いくつかの画像をキャプチャできますが、数枚の写真の後、アプリケーションはエラー ログでクラッシュしますOut of memory。JPEGを圧縮するためのより良いソリューションを提供してください。

ありがとうございました

4

2 に答える 2

0

あなたが提供したソリューションの問題は、ビットマップがすべてのメモリを割り当てていることです。あなたがする必要があるのは、これをループの最後に追加することです。

bitmapData.recycle();
System.gc();

これにより、ビットマップが無効でガベージ コレクションの準備ができているとマークされ、手動でガベージ コレクタが呼び出されます。

于 2013-05-20T20:49:41.540 に答える