我需要拍摄一张图像,对其进行缩放、遮罩、添加背景以防其中一些是透明的,然后添加叠加图像。为此,我编写了以下内容:
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 位图会改变),或者甚至作为可绘制的位图创建位图?