android VideoView截屏黑屏解决方法

来源:互联网 发布:linux运行jar文件 编辑:程序博客网 时间:2024/06/06 01:39

       今天在开发中需要截取正在播放的在线视频中的画面,于是在网上找了几种方法,但效果都一样,截出来的图片黑黑的一片,为了验证截屏方法是不是有问题,于是就截了个全屏,发现截出来的图片屏幕上半部分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):

问题解决,如果哪位朋友有更好的方法和发现不足请多多指教!谢谢



1 0