Java 动画时混合位图

Java 动画时混合位图,java,android,bitmap,blending,Java,Android,Bitmap,Blending,我正在开发一个Android应用程序,我想将位图与Photoshop中的乘法或差分之类的过滤器混合在一起。位图1水平平移,位图2垂直平移 我几乎没有什么想法: 1创建一个方法,进行一些计算,以找到两个位图的相交部分,需要每帧交叉2个矩阵,非常重,似乎不可能?。然后在2位图上裁剪交点,混合它们,最后绘制它。另一个想法是在两个位图之间进行ANDing,可能比另一种方法更快,该函数是否已经存在 2 OpenGLES?但我真的不知道怎么用它 3但最近我发现了这个示例代码,它在画布上混合了两个位图,并使用

我正在开发一个Android应用程序,我想将位图与Photoshop中的乘法或差分之类的过滤器混合在一起。位图1水平平移,位图2垂直平移

我几乎没有什么想法:

1创建一个方法,进行一些计算,以找到两个位图的相交部分,需要每帧交叉2个矩阵,非常重,似乎不可能?。然后在2位图上裁剪交点,混合它们,最后绘制它。另一个想法是在两个位图之间进行ANDing,可能比另一种方法更快,该函数是否已经存在

2 OpenGLES?但我真的不知道怎么用它

3但最近我发现了这个示例代码,它在画布上混合了两个位图,并使用了一种颜料。结果是我想要的,但仍然没有动画。因此,除了此活动之外,我还使用onDrawCanvas方法创建了一个新的类extends View

    @Override
    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_compo);

       Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.bm1);
       Bitmap bm2 = BitmapFactory.decodeResource(getResources(), R.drawable.bm2);
       blend(bm1,bm2);
    }

private void blend(Bitmap bm1, Bitmap bm2){

    DisplayMetrics metrics = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int h = metrics.heightPixels;
    int w = metrics.widthPixels;

    /// BLEND MODE ///
    // Create result image
    Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
    Bitmap result = Bitmap.createBitmap(w, h, conf);
    Canvas canvas = new Canvas();
    canvas.setBitmap(result);

    // Get proper display reference
    BitmapDrawable drawable = new BitmapDrawable(getResources(), result);
    ImageView imageView = (ImageView)findViewById(R.id.photo1);
    imageView.setImageDrawable(drawable);

    // Draw base
    canvas.drawBitmap(bm2, 0, 0, null);

    // Draw overlay
    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY));
    paint.setShader(new BitmapShader(bm1, TileMode.CLAMP, TileMode.CLAMP));

    canvas.drawRect(700, 700, bm2.getWidth(), bm2.getHeight(), paint);
}
以下是更改“canvas.drawRect”中的值的结果:

你有其他解决办法吗?或者有助于实现动画视图上的过滤器的建议?完美的解决方案是在XML中添加android:blendMode=Multiply之类的内容,但这似乎并不容易

先谢谢你。J'