我需要拍摄图像,缩放图像,对其进行遮罩,添加背景以防其中一些是透明的,然后添加叠加图像。为此,我写了以下内容:
Canvas canvas = new Canvas();
Bitmap mainImage = Bitmap.createScaledBitmap(((BitmapDrawable)d).getBitmap(), iconSize, iconSize, false);
Bitmap result = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888);
canvas.setBitmap(result);
Paint paint = new Paint();
paint.setFilterBitmap(false);
Bitmap mask = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.res, context.mask_bg)
, iconSize, iconSize, false);
canvas.drawBitmap(mask, 0, 0, paint);
canvas.drawBitmap(mainImage, 0, 0, paint);
mask = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.res, context.mask)
, iconSize, iconSize, false);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(mask, 0, 0, paint);
mask = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.res, context.mask_frame)
, iconSize, iconSize, false);
paint.setXfermode(null);
canvas.drawBitmap(mask, 0, 0, paint);
现在这个操作将在我的应用程序中发生。我的应用程序总是运行一个服务(在这种情况下是上下文)。在图像方面,我不太了解性能,我知道它们在空间中使用的实际尺寸是它的4倍,但这对于我一遍又一遍地重建相同的物体似乎是浪费。此外,我的应用程序的主要需求是性能超过规模。
所以我想知道每次在服务中生成位图是否更好,所以它们只创建一次(每次只更改mainImage位图)或甚至作为drawable创建位图?
答案 0 :(得分:1)
永远不要在显示它的活动/片段之外保存一个可绘制的
它可以很容易地创建内存泄漏:drawable保持对其活动的引用,因此垃圾收集器不能销毁它,即使它已被销毁并重新创建。
改为使用位图。