android图片平铺水印

今天因需要要求做了个图片加水印,以前都是在图片某个位置加水印,而这次要整个图片都是水印。

首先将水印图片进行倾斜处理,如下:

fun watermarkTilt(src: Bitmap): Bitmap {
            val width = src.getWidth()
            val height = src.getHeight()
            //创建一个bitmap
            val newb = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)// 创建一个新的和SRC长度宽度一样的位图
//            将该图片作为画布
            val canvas = Canvas(newb)
            //将该文字图片逆时针方向倾斜45度
//            canvas.rotate(-45f, width/2f, height/2f)
            //在画布 0,0坐标上开始绘制原始图片
            canvas.drawBitmap(src, 0f, 0f, null)
            // 保存
            canvas.save(Canvas.ALL_SAVE_FLAG)
            // 存储
            canvas.restore()
            return newb
        }

然后将获取的水印倾斜的bitmap,再讲水印添加到图片上,如下:

fun addWaterMark(src: Bitmap, waterMark: Bitmap, gContext: Context): Bitmap{
            val width = src.width
            val height = src.height
            val strwid = waterMark.width
            val strhei = waterMark.height
            val inter = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 25f, gContext.getResources().getDisplayMetrics())
            var markBitmap: Bitmap? = null
            try {
                markBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444)
                val canvas = Canvas(markBitmap!!)
                //在画布 0,0坐标上开始绘制原始图片
                canvas.drawBitmap(src, 0f, 0f, null)

                var i = 0
                while (i <= width) {
                    var count = 0
                    var j = 0
                    while (j <= width) {
                        if (count % 2 == 0) {
                            canvas.drawBitmap(waterMark, i.toFloat(), j.toFloat(), null)
//                        canvas.drawText(gText, i.toFloat(), j.toFloat(), paint)
                        } else {
                            //偶数行进行错开
                            canvas.drawBitmap(waterMark, (i + strwid / 2).toFloat(), j.toFloat(), null);
//                        canvas.drawText(gText, (i + strwid / 2).toFloat(), j.toFloat(), paint)
                        }
                        j = (j.toFloat() + inter + strhei.toFloat()).toInt()
                        count++
                    }
                    i = (i.toFloat() + strwid.toFloat() + inter).toInt()
                }
                canvas.save(Canvas.ALL_SAVE_FLAG)
                //  ACache.get(gContext).put(gText, markBitmap);
            } catch (e: OutOfMemoryError) {
                //            Util.LOGD(TAG, e);
                if (markBitmap != null && !markBitmap.isRecycled) {
                    markBitmap.recycle()
                    markBitmap = null
                }
            }
            return markBitmap!!

        }
大致思路注释上也写清楚了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值