Android - 如何使用alpha蒙版提高图像翻译的性能?

时间:2012-01-10 16:52:04

标签: android performance canvas alpha multi-touch

我有这个代码,我在每个触摸事件上调用一个alpha蒙版位图:

...

        Canvas canvas = new Canvas();
        Bitmap bleed = BitmapFactory.decodeResource(resources, R.drawable.bleed);
        Bitmap photoBG = BitmapFactory.decodeResource(resources, R.drawable.photo_bg);
        Bitmap mask = BitmapFactory.decodeResource(resources, R.drawable.mask);
        Bitmap result = Bitmap.createBitmap(bleed.getWidth(), bleed.getHeight(), Bitmap.Config.ARGB_8888);


        canvas.setBitmap(result);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);
        canvas.drawBitmap(photoBG, 0, 0, paint);
        canvas.drawBitmap(selectedImage, matrix, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

        canvas.drawBitmap(mask, 0, 0, paint);
        paint.setXfermode(null);
        canvas.drawBitmap(bleed, 0, 0, paint);


        myImageView.setImageBitmap(result);
        bleed.recycle();
        mask.recycle();
        img.invalidate();

    }

... 结果图像没问题但是当我拖动图像时,性能非常慢,我附加了一个解释性图像和我的应用程序屏幕截图(注意:应用程序背景为灰色)。

enter image description here

我应该坚持使用此代码(在画布上绘图)还是有更好的方法来实现我的目标?

1 个答案:

答案 0 :(得分:3)

您每次触摸都会创建4位图,这就是您的性能问题。这些是非常昂贵的调用(尤其是decode *()调用。)只创建/加载一次btimaps:)