这次写项目有一个分享的功能,需要分享屏幕的指定部分,这就需要用到屏幕的截图,如果用系统的截图功能不能满足要求。下面来看看我的截图功能,并把其存储到指定位置。
整体的思想是:先把控件的对象转化成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;
}
}
到现在位置,屏幕截图就完成啦!!希望对大家有所帮助,另外有人能解决我那个问题,请留言!!!