У меня есть этот код, который я называю на каждого сенсорного события, которые делают альфа-маскарад растрового изображения:Android - Как улучшить производительность перевода изображений с помощью альфа-маскировки?
...
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();
}
... Результат изображения в порядке, но когда я перетащить изображение вокруг , производительность очень медленная, я приложил пояснительный образ и захват экрана приложения (Примечание: в приложении серый цвет).
Должен ли я придерживаться этого кода (рисунок на холсте) или есть лучший способ достижения своей цели?
Правильно, о чем я думал ... Я попробую и дам вам знать –
Вы можете создавать/декодировать 'bleed',' photoBG' и 'mask' только один раз, перед первым событием касания. Вам даже не нужно создавать «результат» в каждом случае, создавать его один раз перед первым событием касания и очищать его (заполнять черным) при каждом вызове. –
Хорошо, производительность намного лучше, но все равно не так гладко, как хотелось бы. Если бы я собирался написать что-то подобное с нуля, какой был бы правильный подход? –