2012-02-27 22 views
1

以下の引用符で囲まれたメソッドを使用して、ビットマップの角を丸くします。 OutOfMemoryの例外のためにではなく、しばらくそれは完全に動作します。例外は多くの場合、行で発生しますandroidのビットマップを使って作業中のメモリ不足

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
     bitmap.getHeight(), Config.ARGB_8888); 

ここで特別なコードはありませんか?私を助けてください。

public static Bitmap roundBitmap(Bitmap bitmap, int roundedRadius) { 
    if (bitmap == null) 
     return null; 
    if (roundedRadius == 0) { 
     return bitmap; 
    } 
    // Bitmap output = bitmap.copy(Config.ARGB_8888, true); 
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
      bitmap.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 
    final int color = 0xffffff00; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF rectF = new RectF(rect); 
    final float roundPx = roundedRadius; 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 
    return output; 
} 
+1

メモリ不足が問題の原因ではなく、何か他のものであるときに、エラーメッセージ「メモリ不足」が表示されることがあります。スタックトレースやエラーメッセージを指定できますか? –

+1

別の似たスレッドで投稿された私の答えはあなたを助けるかもしれません:http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object/ 18544069#18544069 – Bruce

答えて

1

あなたは、ビットマップが使用しているメモリを解放するためにbitmap.recycle()を呼び出す必要がありroundBitmap()を呼び出した後に元のビットマップを必要としない場合。

-4
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
    bitmap.getHeight(), new BitmapFactory.Options().inSampleSize=4); 

ビットマップを作成するには、上記のコードをお試しください。

+0

動作していません。コンパイル時エラーが表示されています。 –

関連する問題