今天在開發中需要截取正在播放的線上視訊中的畫面,于是在網上找了幾種方法,但效果都一樣,截出來的圖檔黑黑的一片,為了驗證截屏方法是不是有問題,于是就截了個全屏,發現截出來的圖檔螢幕上半部分VideoView區域黑黑的一片,下半部分界面正常截取,說明截屏方法沒有問題,問題出在VideoView截屏的時候獲得不到畫面,網上找了多種方法試了也沒有解決,最後靈機一動想到了一種方法:使用adb指令截取全屏,然後再用代碼對截取的全屏圖檔進行截取處理為需要的部分,問題解決。
我是一枚新人,朋友們有什麼更好的方法或者本文不足請多多指教。
代碼如下:
public void sreenShot() {
String path = "/mnt/sdcard/" + new Date().getTime() + ".png";
String cmd = "screencap -p " + path;
try {
Process process = Runtime.getRuntime().exec("su");//不同的裝置權限不一樣
PrintWriter pw = new PrintWriter(process.getOutputStream());
pw.println(cmd);
pw.flush();
pw.println("exit");
pw.flush();
try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pw.close();
process.destroy();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
然後在需要顯示的地方或者處理圖檔的地方:
用Bitmap oldMap = BitmapFactory.decodeFile(path);//path:儲存圖檔的路徑。
Bitmap newMap = Bitmap.createBitmap(oldMap,0,0,width,height);//老的bitmap,X起始點,Y起始點, X結束點,Y結束點
這樣就獲得需要長款的截圖,本文截出來的圖檔寬和高是相反的,是以需要進行X,Y的起始點和結束點互換,并且需要順時針旋轉90度,方法如下:
Matrix mx = new Matrix();
mx.postRotate(90);
是以上面第二行代碼需要這樣寫: Bitmap newMap = Bitmap.createBitmap(oldMap,0,0,height,width,mx,true):
問題解決,如果哪位朋友有更好的方法和發現不足請多多指教!謝謝