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