截取屏幕的指定内容

这次写项目有一个分享的功能,需要分享屏幕的指定部分,这就需要用到屏幕的截图,如果用系统的截图功能不能满足要求。下面来看看我的截图功能,并把其存储到指定位置。

整体的思想是:先把控件的对象转化成bitmap对象,然后把bitmap对象在转化成图片,然后存储起来。我这里有一个疑问,到现在还没有解决:这个截图功能需要在点击监听事件里面,才可以完成截图,如果不在监听里面,就不能完成截图?如果哪位大神知道原因,请不吝赐教!!!小弟,在此谢过啦!!!废话不多说啦,开始上代码:

/**
 * 将View转化为BitMap对象,有选择性的截屏
 */
public class ViewBitmapTools {
	/**
	 * 将传递过来的view对象转化为Bitmap
	 */
	public static Bitmap getBitmap(View view) {
		Bitmap bitmap = null;
		
//		ALPHA_8        代表8位Alpha位图
//		ARGB_4444      代表16位ARGB位图
//		ARGB_8888     代表32位ARGB位图
//		RGB_565         代表8位RGB位图
//
//		位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真
		bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
				Bitmap.Config.ARGB_8888);
		
		// 利用bitmap生成画布
		Canvas canvas = new Canvas(bitmap);
		
		// 给画布设置背景颜色,防止特定情况下截屏出现黑色
		canvas.drawColor(Color.WHITE);
		
		// 把view中的内容绘制在画布上
		view.draw(canvas);
		return bitmap;
	}
	
	/**
	 * 把截取的屏幕内容转化为图片
	 */
	public static String getPicture(View view) {
		// TODO Auto-generated method stub
		//通过控件view获得bitmap对象
		Bitmap bitmap=getBitmap(view);
		//图片存储路径
		String picPath="";
		
		 FileOutputStream fileOutputStream = null;
		    try {
		        // 获取 SD 卡根目录
		        String saveDir = Environment.getExternalStorageDirectory() + "/pic";
		        // 新建目录
		        File dir = new File(saveDir);
		        if (! dir.exists()){
		        	dir.mkdir();
		        }
		        //生成的图片名称
		        String filename = "img.png";
		        // 新建文件
		        File file = new File(saveDir, filename);
		        // 打开文件输出流
		        fileOutputStream = new FileOutputStream(file);
		        // 生成图片文件
		        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
		        // 相片的完整路径
		        picPath = file.getPath();
		    } catch (Exception e) {
		        e.printStackTrace();
		    } finally {
		        if (fileOutputStream != null) {
		            try {
		                fileOutputStream.close();
		            } catch (Exception e) {
		                e.printStackTrace();
		            }
		        }
		    }
		    return picPath;
	}
}

到现在位置,屏幕截图就完成啦!!希望对大家有所帮助,另外有人能解决我那个问题,请留言!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值