图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可。前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操作像素点。下面给出别外一种方式让图片叠加--用Canvas处理图片,canvas已经封装好了,直接调用就行。

下面看效果:

+=

代码:

  1. /**
  2. * 组合涂鸦图片和源图片
  3. * @param src 源图片
  4. * @param watermark 涂鸦图片
  5. * @return
  6. */
  7. public Bitmap doodle(Bitmap src, Bitmap watermark)
  8. {
  9. // 另外创建一张图片
  10. Bitmap newb = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
  11. Canvas canvas = new Canvas(newb);
  12. canvas.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入原图片src
  13. canvas.drawBitmap(watermark, (src.getWidth() - watermark.getWidth()) / 2, (src.getHeight() - watermark.getHeight()) / 2, null); // 涂鸦图片画到原图片中间位置
  14. canvas.save(Canvas.ALL_SAVE_FLAG);
  15. canvas.restore();
  16. watermark.recycle();
  17. watermark = null;
  18. return newb;
  19. }

跟前面一样,要注意图片最好放在assets目录,另外注意图片回收,不然图片过到会造成内存紧张。这种叠加方式一般选用PNG格式的图片做为涂鸦图片或者水印,当然也可以用JPG,那就需要按照前面所说的android图像处理系列之六--给图片添加边框(下)-图片叠加进行像素点过滤,这样会影响处理速度,所以不建议用JPG图片,如果能写更高效的算法,也可以。

另外在做涂鸦的时候,需求可能会是用户可以按住涂鸦图片,然后进行拖动效果。这样的话,我给个思路,重写ImageView里面的onTouchEvent方法,MotionEvent.getAction()里面有三种状态,MotionEvent.ACTION_DOWN、MotionEvent.ACTION_UP和MotionEvent.ACTION_MOVE,根据这三种状态来判断用户的行为,决定是否移动图片,另外要注意判断涂鸦图片是否移动到原图片的边缘。由于这部分代码是跟裁剪放在一样的,不好贴出来,所以给大家一个思路,后面会把裁剪的代码贴出来。

OK,这篇就写到这里,后面还有一种图片叠加的方式,敬请期待!

最新文章

  1. OpenCASCADE Make Primitives-Box
  2. WebService 不依赖配置文件直接在构造函数配置地址
  3. Codeforces Round #358(div 2)
  4. Trie树 & 01Trie
  5. xcode 插件管理工具
  6. C#- Winform最小化到托盘
  7. ZOJ 2745 01-K Code(DP)(转)
  8. Apache CXF 3.0: CDI 1.1 Support as Alternative to Spring--reference
  9. 【HDOJ】1455 Sticks
  10. .NET基础拾遗(5)反射2
  11. Putty(菩提)远程连接服务器教程听语音
  12. django关闭调试信息,打开内置错误视图
  13. 【刷题】Git知识点
  14. HDU 3586 二分答案+树形DP判定
  15. 6月23 Ajax传地址
  16. devstack 安装(centos7)
  17. Https 安全传输的原理
  18. linux执行jmeter脚本报错
  19. JavaScript: The Good Parts
  20. TFS二次开发08——分支(Branch)和合并(Merge)

热门文章

  1. 【Codeforces Round #421 (Div. 2) A】Mister B and Book Reading
  2. Spring Cloud分布式Session共享实践
  3. JVM学习心得
  4. centos7;windows下安装和使用spice
  5. Sqlite 命令行导出、导入数据(直接支持CSV)
  6. 巧用FPGA中资源
  7. 数字信号处理C语言集(1.1 随机数的产生)
  8. 128.C++文件操作小结
  9. P1824 进击的奶牛
  10. jquery.base64.js