Android-BitmapComposer(类似于AE的合成模式)
灵感来源于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);
}
});
}
});