0
我需要拍摄图像,对其进行缩放,遮罩,添加背景以防其中一些透明,然后添加叠加图像。要做到这一点,我写了以下内容:内存vs性能,哪个最好?
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从该位置创建位图?
好吧,那么保存的位图安全可以使用,而不是一遍又一遍地重新创建吗? – crazyfool 2013-05-06 11:57:35
如果您将多次重复使用相同的位图,强烈建议不要每次都重新创建它。避免在诸如getView()等对性能至关重要的方法中创建位图(或任何昂贵的对象)尤为重要。 – Teovald 2013-05-06 12:25:48
这就是我正在寻找的答案。很多appreaciated :-) – crazyfool 2013-05-06 12:59:07