天天看點

android videoview截屏,android VideoView截屏黑屏解決方法

今天在開發中需要截取正在播放的線上視訊中的畫面,于是在網上找了幾種方法,但效果都一樣,截出來的圖檔黑黑的一片,為了驗證截屏方法是不是有問題,于是就截了個全屏,發現截出來的圖檔螢幕上半部分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):

問題解決,如果哪位朋友有更好的方法和發現不足請多多指教!謝謝