Android-如何通过alpha掩蔽提高图像翻译的性能?
我有一段代码,我在渲染alpha蒙版位图的每个触摸事件中调用该代码: 。。。 结果图像还可以,但当我拖动图像时,性能非常慢,我附加了一个说明图像和我的应用程序屏幕截图(注意:应用程序的背景是灰色的)Android-如何通过alpha掩蔽提高图像翻译的性能?,android,performance,canvas,alpha,multi-touch,Android,Performance,Canvas,Alpha,Multi Touch,我有一段代码,我在渲染alpha蒙版位图的每个触摸事件中调用该代码: 。。。 结果图像还可以,但当我拖动图像时,性能非常慢,我附加了一个说明图像和我的应用程序屏幕截图(注意:应用程序的背景是灰色的) 我应该坚持这条代码(在画布上绘制),还是有更好的方法来实现我的目标?您每次触摸都要创建4个位图,这是您的性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只创建/加载BTIMAP一次:)每次触摸都要创建4个位图,这是性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只
我应该坚持这条代码(在画布上绘制),还是有更好的方法来实现我的目标?您每次触摸都要创建4个位图,这是您的性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只创建/加载BTIMAP一次:)每次触摸都要创建4个位图,这是性能问题。这些是非常昂贵的调用(尤其是decode*()调用。)只创建/加载BTIMAP一次:)对,我是怎么想的。。。我会尝试让您知道,在第一次触摸事件之前,您只能创建/解码一次
出血
、照片背景
和遮罩
。您甚至不需要在每个事件中创建result
,在第一次触摸事件之前创建一次,并在每次调用时清除它(用黑色填充)。好的,现在性能要好得多,但它仍然没有我希望的那么平滑。如果我要从头开始写这样的东西,什么是正确的方法?对,我在想什么。。。我会尝试让您知道,在第一次触摸事件之前,您只能创建/解码一次出血
、照片背景
和遮罩
。您甚至不需要在每个事件中创建result
,在第一次触摸事件之前创建一次,并在每次调用时清除它(用黑色填充)。好的,现在性能要好得多,但它仍然没有我希望的那么平滑。如果我打算从头开始写这样的东西,那么正确的方法是什么?
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();
}