Android-BitmapComposer(类似于 AE 的合成模式)

841 阅读1分钟
原文链接: luhaoaimama1.github.io

灵感来源于AE,参考AE合成图的步骤;

封装后的使用方式

  • 可以无限newLayer,并且每个layer对应的bitmap都有以下特征
    • mask PorterDuff.Mode 造作
    • colorFilter 滤镜操作
    • matrix 矩阵操作 既 位置,旋转缩放等。
BitmapComposer.newComposition(bt.getWidth(), bt.getHeight(), Bitmap.Config.ARGB_8888)
.clear()
.newLayer(BitmapComposer.Layer.bitmap(bt)
                   .colorFilter(new ColorMatrixColorFilter(colorMatrix))
                    .matrix(matrix)  )
.newLayer(BitmapComposer.Layer.bitmap(bt)
          .colorFilter(new ColorMatrixColorFilter(colorMatrix))
          .mask(wave, PorterDuff.Mode.DST_IN)
           .matrix(matrix)    )
.render();

实例demo:zone-sdk项目运行后:->动画、surfaceView、绘图方面的研究->波浪 进入即可看到;

demo原理:第一层是 黑白图片,第二层是加过 波浪Mask(遮罩的-既android的PorterDuff)原图

代码范例:

image2.post(new Runnable() {
            @Override
            public void run() {
                Bitmap bt = SampleUtils.load(WaveActivity.this, R.drawable.aaaaaaaaaaaab)
                        .bitmap();
                ColorMatrix colorMatrix = new ColorMatrix();
                colorMatrix.setSaturation(0);
                BitmapComposer bitmapComposer = BitmapComposer.newComposition(bt.getWidth(), bt.getHeight(), Bitmap.Config.ARGB_8888);
                Matrix first = new Matrix();
                first.postTranslate(0, -20);
                new WaveHelper(bt.getWidth(), bt.getHeight(), new WaveHelper.RefreshCallback() {
                    @Override
                    public void refresh(Bitmap wave) {
                        Bitmap render = bitmapComposer.clear()
                                .newLayer(BitmapComposer.Layer.bitmap(bt)
                                        .colorFilter(new ColorMatrixColorFilter(colorMatrix)))
                                .newLayer(
                                        BitmapComposer.Layer.bitmap(bt)
//                                              .colorFilter(new ColorMatrixColorFilter(colorMatrix))
                                                .mask(wave, PorterDuff.Mode.DST_IN)
//                                              .matrix(first)
                                )
                                .render();
                        image2.setImageBitmap(render);
                    }
                });
            }
        });

Reference&Thanks:

github.com/race604/Wav…