Android - Как повысить производительность перевода изображений с помощью альфа-маскирования? - PullRequest
0 голосов
/ 10 января 2012

У меня есть этот код, который я вызываю при каждом событии касания, которое отображает растровое изображение с альфа-маской:

...

        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 Ответ

3 голосов
/ 10 января 2012

Вы создаете 4 растровых изображения при каждом касании, это ваша проблема с производительностью.Это очень дорогие вызовы (особенно вызовы decode * ().) Создайте / загрузите btimaps только один раз:)

...