实现Android水印效果

    @Override
public void onCreate( Bundle savedInstanceState) {
super .onCreate ( savedInstanceState) ;
setContentView( R.layout .main ) ;
 
ImageView image = ( ImageView) this .findViewById ( R.id .imageView ) ;
Bitmap mark = BitmapFactory.decodeResource ( this .getResources ( ) , R.drawable .android ) ;
Bitmap photo = BitmapFactory.decodeResource ( this .getResources ( ) , R.drawable .photo ) ;
Bitmap photoMark = Bitmap.createBitmap ( photo.getWidth ( ) , photo.getHeight ( ) , Config.ARGB_8888 ) ;
 
Canvas canvas = new Canvas ( photoMark) ;
canvas.drawBitmap ( photo, 0 , 0 , null ) ;
canvas.drawBitmap ( mark, photo.getWidth ( ) - mark.getWidth ( ) , photo.getHeight ( ) - mark.getHeight ( ) , null ) ;
canvas.save ( Canvas .ALL_SAVE_FLAG ) ;
canvas.restore ( ) ;
image.setImageBitmap ( photoMark) ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值