2012-01-10 3 views
0

У меня есть этот код, который я называю на каждого сенсорного события, которые делают альфа-маскарад растрового изображения: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(); 

    } 

... Результат изображения в порядке, но когда я перетащить изображение вокруг , производительность очень медленная, я приложил пояснительный образ и захват экрана приложения (Примечание: в приложении серый цвет).

enter image description here

Должен ли я придерживаться этого кода (рисунок на холсте) или есть лучший способ достижения своей цели?

ответ

3

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

+0

Правильно, о чем я думал ... Я попробую и дам вам знать –

+0

Вы можете создавать/декодировать 'bleed',' photoBG' и 'mask' только один раз, перед первым событием касания. Вам даже не нужно создавать «результат» в каждом случае, создавать его один раз перед первым событием касания и очищать его (заполнять черным) при каждом вызове. –

+1

Хорошо, производительность намного лучше, но все равно не так гладко, как хотелось бы. Если бы я собирался написать что-то подобное с нуля, какой был бы правильный подход? –

 Смежные вопросы

  • Нет связанных вопросов^_^