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