1. 程式人生 > >Android 任意區域截圖

Android 任意區域截圖

1、全屏截圖

Android其實可以做到任意區域截圖,不過我們先來看看整個螢幕截圖程式碼,相信大家很熟悉,程式碼如下

View decorView = activity.getWindow().getDecorView();
decorView.setDrawingCacheEnabled(true);
view.buildDrawingCache();
//獲取螢幕整張圖片
Bitmap bitmap = decorView.getDrawingCache();

上述程式碼中的bitmap就是當前螢幕的截圖的bitmap,獲取bitmap後大家自行處理自己業務就可以了。。。

2、區域截圖

法1:View.getDrawingCache()

關鍵程式碼如下:

 view.setDrawingCacheEnabled(true);
 view.buildDrawingCache();
 Bitmap bitmap = view.getDrawingCache();

注意:如果你的view恰好是textview且恰好你沒有給它設定背景,那麼很不幸你獲取的bitmap看到的是黑色的,它並不是你所期望的那樣哦,解決方案點它

其實還有另外一種方法就是,從全屏圖片中裁剪中我們需要的圖片,告訴系統裁剪圖片的起始座標以及的大小,參見下面方法。

法2:Bitmap.createBitmap (Bitmap source, int x, int y, int width, int height)

這裡寫圖片描述

從官方文件來看,source代表原始的圖片;(x,y)代表從source圖片中起始點開始裁剪,width,height表示裁剪圖片的大小。

/**
  * 
  * @param view 需要擷取圖片的view
  * @return 截圖
  */
 private Bitmap getBitmap(View view) throws Exception {

     View screenView = getWindow().getDecorView();
     screenView.setDrawingCacheEnabled(true);
     screenView.buildDrawingCache();

     //獲取螢幕整張圖片
Bitmap bitmap = screenView.getDrawingCache(); if (bitmap != null) { //需要擷取的長和寬 int outWidth = view.getWidth(); int outHeight = view.getHeight(); //獲取需要截圖部分的在螢幕上的座標(view的左上角座標) int[] viewLocationArray = new int[2]; view.getLocationOnScreen(viewLocationArray); //從螢幕整張圖片中擷取指定區域 bitmap = Bitmap.createBitmap(bitmap, viewLocationArray[0], viewLocationArray[1], outWidth, outHeight); } return bitmap; }

上述程式碼只要傳入你需要擷取的圖的view就可以返回對應的bitmap,也不需要管它是textview且有沒有設定背景,是不是很方便?