videoview使用getDrawingCache 截图黑屏

videoview 截图黑屏

公司要做一个监控显示网页,在监控机器上用videoview显示监控画面,需要在网页显示videoview的实时画面。就想到直接截取整个videoview区域,直接传图片给网页。发现videoview使用getDrawingCahe截图容易黑屏,但是其中的滚动字幕是可以正常截取显示的。
查了很多资料,有的说是截取的大小不同,有的说是videoview的版本不对,问题各种各样。
自己尝试了很久,在主管帮助下使用下面的方法。

	private Bitmap toConformBitmap(Bitmap background, Bitmap foreground) 
	{//拼接图片,video截图+滚动字幕截图
        Canvas cv = new Canvas(background);   
        cv.drawBitmap(foreground, 0, background.getHeight()-foreground.getHeight(), null);
        cv.save(Canvas.ALL_SAVE_FLAG);//保存   
        cv.restore();//存储   
        return background;   
   }
	
	public InputStream GetBitmapData()
	{ //获取屏幕截图
        Bitmap bm = mVideoView.getBitmap();
        if(bm == null)
        {
            Log.e(TAG,"bitmap is null");
            return null;
        }
        
        bm  = Bitmap.createScaledBitmap(bm, bm.getWidth()/3, bm.getHeight()/3, true);
        
        if(mScollView.getVisibility() == View.VISIBLE)
        {
	        Bitmap bmText = mScollView.getDrawingCache();
	        if( bmText != null )//若videoview存在滚动字幕,则截取滚动字幕截图
	        {
	        	bmText = Bitmap.createScaledBitmap(bmText, bmText.getWidth()/3, bmText.getHeight()/3, true);
	        	bm = toConformBitmap(bm,bmText);//拼接
	        }
	        else 
	        {
	        	Log.e(TAG,"mScollView bitmap is null");
			}
        }

        ByteArrayOutputStream fout = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 90, fout);//图片转为.jpg
        
        ByteArrayInputStream  fin = new ByteArrayInputStream(fout.toByteArray());
        
        return fin;
	}
	
	public InputStream GetBitmapDataAsync() throws InterruptedException
	{//将图片变为数据流能够传给网页
		final ArrayBlockingQueue<InputStream> InputQueue = new ArrayBlockingQueue<InputStream>(1);
		
		runOnUiThread(new Runnable() 
		{
			@Override
			public void run()
			{
				InputQueue.add(GetBitmapData());
			}
		});
		
		return InputQueue.take();
	}
......
GetBitmapDataAsync();//获取屏幕截图Bitmap流
......

注意:videoview播放视频时可以正常截图,但是播放监控时容易黑屏。因为播放视频时,后台会同时播放,获取的截图都是固定的;但是监控不能预知下一秒会出现什么,所以会黑屏。具体的技术原因我这个小白不清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值