我在多个案例中使用了一个常用的位图作为Google地图的标记。 每次我使用这个位图,我都会在上面绘制一些文字。有时会导致OutOfMemory异常。我想知道是否可以在内存中保留一个静态可变位图,只提供一个覆盖到地图的文本副本。
目前,我有一个不可变位图的引用,我从中创建了可变副本。 是否有可能以某种方式达到其原始状态,没有文本?
当前代码:
public static Bitmap drawTextToBitmap(Context context, Bitmap bitmap, String text) {
float scale = context.getResources().getDisplayMetrics().density;
Bitmap mutableBitmap = null;
try {
mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(mutableBitmap);
canvas.save();
// new antialised Paint
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
paint.setTextAlign(Paint.Align.CENTER);
// text size in pixels
paint.setTextSize((int) (BITMAP_TEXT_SIZE * scale));
// text shadow
paint.setShadowLayer(1f, 0f, 1f, Color.GRAY);
// draw text to the Canvas center
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
int x = bitmap.getWidth() / 2 - convertDpToPixel(BITMAP_TEXT_OFFSET);
int y = bitmap.getHeight() / 2;
canvas.drawText(text, x, y, paint);
canvas.restore();
} catch(Throwable t) {
}
return mutableBitmap;
}