需求:实现可以缩放、移动和打马赛克的控件。
由于之前对图片处理的经验很缺乏,所以拿到需求的第一步我就从github上面找相关的项目。
然后,就找到了这个项目:ProMosaic
这个项目有两个痛点:
1.加载图片未处理尺寸,当尺寸过大时,会内存溢出(小问题)
2.未实现缩放功能
正文:
一、ProMosaic实现马赛克原理分析
首先,在内存中有三层Bitmap:
bmBaseLayer ---- 原图 ,
bmCoverLayer ---- 将整张原图转成马赛克效果
bmTouchLayer ---- 记录手指滑过的路径Path
每次手指滑动时,将手指的Path保存下来,并且将所有Path绘制在bmTouchLayer中,然后将bmCoverLayer和bmTouchLayer合并,合并的算法采用的是Xfermode的DST_IN效果(具体Xfermode请自己查询相关内容)。反正最终的结果就是生成一张马赛克图层bmMosaicLayer,这个图层就是要打马赛克的部分。
然后,将bmMosaicLayer绘制在bmBaseLayer图层上,就实现了最终的马赛克效果。

本文介绍了如何在Android中实现一个可缩放、移动并带有马赛克效果的自定义控件。通过ProMosaic项目作为起点,分析其马赛克原理,包括三层Bitmap的使用以及DST_IN效果。接着,优化内存消耗,通过BitmapFactory.Options的inSampleSize压缩图片。最后,实现缩放功能,利用ScaleGestureDetector检测手势,并通过调整Canvas绘制区域实现图片缩放,同时处理手势坐标转换问题。
最低0.47元/天 解锁文章
2800

被折叠的 条评论
为什么被折叠?



