1. 程式人生 > >android影象處理系列之七--圖片塗鴉,水印-圖片疊加

android影象處理系列之七--圖片塗鴉,水印-圖片疊加

               

圖片塗鴉和水印其實是一個功能,實現的方式是一樣的,就是一張大圖片和一張小點圖片疊加即可。前面在android影象處理系列之六--給圖片新增邊框(下)-圖片疊加中也講到了圖片疊加,裡面實現的原理是直接操作畫素點。下面給出別外一種方式讓圖片疊加--用Canvas處理圖片,canvas已經封裝好了,直接呼叫就行。

下面看效果:

+=

程式碼:

/**  * 組合塗鴉圖片和源圖片  * @param src 源圖片  * @param watermark 塗鴉圖片  * @return  */ public Bitmap doodle(Bitmap src, Bitmap watermark) {  // 另外建立一張圖片
  Bitmap newb = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Config.ARGB_8888);// 建立一個新的和SRC長度寬度一樣的點陣圖  Canvas canvas = new Canvas(newb);  canvas.drawBitmap(src, 0, 0, null);// 在 0,0座標開始畫入原圖片src  canvas.drawBitmap(watermark, (src.getWidth() - watermark.getWidth()) / 2, (src.getHeight() - watermark.getHeight()) / 2
, null); // 塗鴉圖片畫到原圖片中間位置  canvas.save(Canvas.ALL_SAVE_FLAG);  canvas.restore();    watermark.recycle();  watermark = null;    return newb; }

跟前面一樣,要注意圖片最好放在assets目錄,另外注意圖片回收,不然圖片過到會造成記憶體緊張。這種疊加方式一般選用PNG格式的圖片做為塗鴉圖片或者水印,當然也可以用JPG,那就需要按照前面所說的android影象處理系列之六--給圖片新增邊框(下)-圖片疊加進行畫素點過濾,這樣會影響處理速度,所以不建議用JPG圖片,如果能寫更高效的演算法,也可以。

另外在做塗鴉的時候,需求可能會是使用者可以按住塗鴉圖片,然後進行拖動效果。這樣的話,我給個思路,重寫ImageView裡面的onTouchEvent方法,MotionEvent.getAction()裡面有三種狀態,MotionEvent.ACTION_DOWN、MotionEvent.ACTION_UP和MotionEvent.ACTION_MOVE,根據這三種狀態來判斷使用者的行為,決定是否移動圖片,另外要注意判斷塗鴉圖片是否移動到原圖片的邊緣。由於這部分程式碼是跟裁剪放在一樣的,不好貼出來,所以給大家一個思路,後面會把裁剪的程式碼貼出來。

OK,這篇就寫到這裡,後面還有一種圖片疊加的方式,敬請期待!