android图像处理系列之七--图片涂鸦,水印-图片叠加(转载)

摘要:
在Android图像处理系列的第六部分-为图像添加边框(底部)-图像覆盖中,我们还讨论了图像覆盖。原理是直接操作像素。这种叠加方法通常使用PNG格式的图片作为涂鸦图片或水印,当然也可以使用JPG。然后,有必要在图片上添加边框(底部),如上文在第六个android图像处理系列中所述——像素滤波的图片叠加,这将影响处理速度。因此,不推荐使用JPG图片。如果你能写一个更有效的算法,你也可以使用JPG图片。

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

下面看效果:

android图像处理系列之七--图片涂鸦,水印-图片叠加(转载)第1张

+

android图像处理系列之七--图片涂鸦,水印-图片叠加(转载)第2张

=

android图像处理系列之七--图片涂鸦,水印-图片叠加(转载)第3张

代码:

  1. /**
  2. *组合涂鸦图片和源图片
  3. *@paramsrc源图片
  4. *@paramwatermark涂鸦图片
  5. *@return
  6. */
  7. publicBitmapdoodle(Bitmapsrc,Bitmapwatermark)
  8. {
  9. //另外创建一张图片
  10. Bitmapnewb=Bitmap.createBitmap(src.getWidth(),src.getHeight(),Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
  11. Canvascanvas=newCanvas(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. returnnewb;
  19. }

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

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

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

如有遗漏之处,欢迎批评指正!

免责声明:文章转载自《android图像处理系列之七--图片涂鸦,水印-图片叠加(转载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇正则表达式(一)JVM(三)JVM对象创建与内存分配机制学习下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

error: ‘for’ loop initial declarations are only allowed in C99 mode

比如写出下面这段程序: for (int i = 0; i < n; ++i) do_something(); 然后用gcc编译,会报‘for’ loop initial declarations are only allowed in C99 mode的错误。 原因是在循环条件中声明变量,只在C99标准中支持,C90标准不支持。 所以改成: int...

php图片压缩

php图片压缩 能对图片的大小、质量进行压缩。 <?php class ThumbHandler {     var $dst_img;// 目标文件     var $h_src; // 图片资源句柄     var $h_dst;// 新图句柄     var $h_mask;// 水印句柄     var $img_create_quality...

解决img标签间距问题

  关于img标签间距问题:多个img之间有间距,包含img标签的div之间有间距。 代码如下: 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>test<...

Android画图并保存图片(转载)

Canvas是一个画布,你可以建立一个空白的画布,就直接new一个Canvas对象,不需要参数。 也可以先使用BitmapFactory创建一个Bitmap对象,作为新的Canvas对象的参数,也就是说这个画布不是空白的, 如果你想保存图片的话,最好是Bitmap是一个新的,而不是从某个文件中读入进来的,或者是Drawable对象。   然后使用Canva...

(19)jQuery操作文本和属性

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>jq操作文本和操作属性</title></head><body> <div class="box">box</...

利用netperf、iperf、mtr测试网络

1、netperf安装和使用   netperf安装   # tar -xzvf netperf-2.7.0.tar.gz # cd netperf-2.7.0 # ./configure # make # make install 在客户端和服务器上都安装好。   netperf使用    首先在服务器端运行netserver. #./net...