Android Opengl录像时添加时间水印 有android代码吗
时间: 2024-02-28 12:56:20 浏览: 24
是的,以下是在 Android OpenGL 录像中添加时间水印的示例代码:
```java
// 创建一个带有时间文本的 Bitmap
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setTextSize(32);
canvas.drawText(getCurrentTime(), x, y, paint);
// 将 Bitmap 转换为纹理
int[] textures = new int[1];
GLES20.glGenTextures(1, textures, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
// 渲染场景
while (recording) {
// 渲染场景
renderScene();
// 在场景中绘制时间水印
GLES20.glUseProgram(watermarkProgram);
GLES20.glUniformMatrix4fv(watermarkMatrixHandle, 1, false, matrix, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
GLES20.glUniform1i(watermarkTextureHandle, 0);
GLES20.glEnableVertexAttribArray(watermarkPositionHandle);
GLES20.glVertexAttribPointer(watermarkPositionHandle, 2, GLES20.GL_FLOAT, false, 0, watermarkVertices);
GLES20.glEnableVertexAttribArray(watermarkTexCoordHandle);
GLES20.glVertexAttribPointer(watermarkTexCoordHandle, 2, GLES20.GL_FLOAT, false, 0, watermarkTexCoords);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GLES20.glDisableVertexAttribArray(watermarkPositionHandle);
GLES20.glDisableVertexAttribArray(watermarkTexCoordHandle);
// 保存帧
saveFrame();
}
// 释放资源
bitmap.recycle();
GLES20.glDeleteTextures(1, textures, 0);
```
其中,`getCurrentTime()` 方法用于获取当前时间文本;`renderScene()` 方法用于渲染场景;`watermarkProgram` 是添加时间水印的 OpenGL 着色器程序;`watermarkMatrixHandle` 是着色器程序中表示变换矩阵的 Uniform 句柄;`watermarkTextureHandle` 是着色器程序中表示纹理采样器的 Uniform 句柄;`watermarkPositionHandle` 和 `watermarkTexCoordHandle` 是着色器程序中表示顶点位置和纹理坐标的 Attribute 句柄;`watermarkVertices` 和 `watermarkTexCoords` 分别是时间水印的顶点位置和纹理坐标数组;`saveFrame()` 方法用于将当前帧保存为视频帧。