简书链接:视频合成加不规则图片实现方式
文章字数:257,阅读全文大约需要1分钟
不规则图片挖空区域放一个视频。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
Bitmap bitmapDrawComb = Bitmap.createBitmap(bgBitmap.getWidth(), bgBitmap.getHeight(), bgBitmap.getConfig());
Canvas canvas = new Canvas(bitmapDrawComb); Paint paint = new Paint(); //绘制背景图层 if (bgBitmap != null) { canvas.drawBitmap(bgBitmap, new Matrix(), paint); } if (bitmapVideoFrame != null) { //绘制视频图层 int leftMargin = ((FrameLayout.LayoutParams) videoPosterContainer.getLayoutParams()).leftMargin; int topMargin = ((FrameLayout.LayoutParams) videoPosterContainer.getLayoutParams()).topMargin; canvas.drawBitmap(bitmapVideoFrame, leftMargin, topMargin, paint); //绘制视频覆盖区域透明图层解决某问题
//防止图层为空的处理start if (mModel.getVideoframes() == 1) { Bitmap bitmapTransVideoExtra = referenceVideoExtraTransCover.get(); if (bitmapTransVideoExtra == null || bitmapTransVideoExtra.isRecycled()) { bitmapTransVideoExtra = getPosterBgBitmap(); referenceVideoExtraTransCover = new WeakReference<Bitmap>(bitmapTransVideoExtra); } else {
} //只裁剪视频插入方块区域 解决不规则图形区域问题 int cropHeight = videoPosterContainer.getHeight(); int cropLeft = leftMargin; int cropWidth = videoPosterContainer.getWidth(); int cropTop = topMargin; //绘制背景 Bitmap bitmap = Bitmap.createBitmap(bitmapTransVideoExtra, cropLeft, cropTop, cropWidth, cropHeight); canvas.drawBitmap(bitmap, cropLeft, cropTop, paint); //模拟测试 /* if (BuildConfig.DEBUG) { Rect rect = new Rect(cropLeft, cropTop, cropLeft + cropWidth, cropHeight + cropTop); paint.setColor(Color.RED); canvas.drawRect(rect, paint); }*/ // canvas.drawBitmap(bitmapTransVideoExtra, desc, desc, paint); //解决不规则图形区域结束
} if (isNeedDrawText) {
dynamicDrawText(canvas, paint); }
}
|
方法就是截屏,但是没有挖空区域的,那么绘制了视频帧图之后再把视频帧图的区域等大高宽的 同等图片背景抠出来再盖上去,上面是具体代码。
另外一种方式是所有文字也动态绘制。
那么先绘制视频,然后绘制视频,然后绘制而其他图片如二维码,然后绘制文字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Bitmap bitmapDrawComb = Bitmap.createBitmap(posterBgBitmap.getWidth(), posterBgBitmap.getHeight(), posterBgBitmap.getConfig());
Canvas canvas = new Canvas(bitmapDrawComb); Paint paint = new Paint();
if (bitmapVideoFrame != null) { //绘制视频图层 int leftMargin = ((FrameLayout.LayoutParams) videoPosterContainer.getLayoutParams()).leftMargin; int topMargin = ((FrameLayout.LayoutParams) videoPosterContainer.getLayoutParams()).topMargin; canvas.drawBitmap(bitmapVideoFrame, leftMargin, topMargin, paint); //绘制视频覆盖区域透明图层解决某问题
}
//绘制背景图层 if (posterBgBitmap != null) { canvas.drawBitmap(posterBgBitmap, new Matrix(), paint); }
if (isNeedDrawText) {
dynamicDrawText(canvas, paint); }
//保存和并的图片到本地 boolean result = ImageUtil.saveBitmapToSDCardByJPG(frameImageInfo.getResultImagePath(), bitmapDrawComb);
|