Android 水印
时间: 2023-11-22 10:50:31 浏览: 46
Android中添加水印的方法有很多种,其中一种比较常用的方法是利用OpenGL ES绘制多次,把不同的纹理如图片、文本等绘制到纹理或窗口上,达到添加水印的效果。具体步骤如下:
1. 首先确认水印添加的位置,可以通过设置水印的大小和根据水印图片长宽比计算水印的顶点坐标来实现。
2. 在顶点坐标数组里预留水印的坐标点,例如可以在左上角和右下角各预留一个坐标点。
3. 获取到水印的纹理ID,可以通过OpenGL ES的纹理处理函数将水印图片转换为纹理ID。
4. 利用OpenGL ES绘制多次,将不同的纹理绘制到纹理或窗口上,达到添加水印的效果。
以下是一个添加图片水印的例子:
```java
// 获取到水印的纹理ID
int watermarkTextureId = TextureHelper.loadTexture(context, R.drawable.watermark);
// 顶点坐标数组
float[] vertexData = {
-1f, -1f, 1f, -1f, -1f, 1f, 1f, 1f, // 用来绘制原始图片
-1f, 0.5f, 0f, 0.5f, -1f, 1f, 0f, 1f // 用来绘制水印图片
};
// 纹理坐标数组
float[] textureData = {
0f, 1f, 1f, 1f, 0f, 0f, 1f, 0f, // 用来绘制原始图片
0f, 1f, 1f, 1f, 0f, 0f, 1f, 0f // 用来绘制水印图片
};
// 绑定纹理
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, watermarkTextureId);
// 设置纹理参数
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
// 绘制
mWatermarkShader.useProgram();
mWatermarkShader.setUniforms(mMVPMatrix, textureId, watermarkTextureId);
mWatermarkShader.bindData(vertexData, textureData);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
```