实现思路:
画图时界面总体是一个大的View里面包含了一些其他组件,所以说想要把绘图软件的界面转换成图片导出,只需要将这个最底层的view导出成图片。
实现方法:
1.在项目的逻辑层新建一个ViewToPicture.java类
2.类中实现如下功能:
Bitmap getBitmapFromView(View view)
传入参数想要导出成图片的view,返回获取到的bitmap格式
private Bitmap getBitmapFromView(View view){
Bitmap bitmap=null;
try{
//获取所要的导出的图片的长宽
int width=view.getWidth();
int height=view.getHeight();
if(height&&width){
//创建view对应的bitmap
bitmap=Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
view.layout(0,0,width,height);
view.draw(canvas);
}
}catch(Exception e){
e.getStackTrace();
}
return bitmap;
}
boolean saveBitmap(Bitmap bitmap, String fileName,Context context)
将生成的bitmap保存到本地相册
public boolean saveBitmap(Bitmap bitmap, String fileName,Context context) {
//获取手机sd card路径
String path = Environment.getExternalStorageDirectory().getPath();
//在sd卡中新建了一个用于存放从Dr.Mind app导出的图片
File file = new File(path+"/Dr.Mind");
//将图片转换为jpg格式存储
fileName=fileName+".jpg";
File[] fileList = file.listFiles();
//查找是否已经存在该张图片,已存在则不再存储
for(int i=0;i<fileList.length;i++){
if(fileName.equals(fileList[i].getName())){
return false;
}
}
if (!file.exists()) {
file.mkdir();
}
File imageFile = new File(file, fileName);
try {
imageFile.createNewFile();
FileOutputStream fos = new FileOutputStream(imageFile);
//压缩bimap尺寸
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, fos);
//文件流写入文件
fos.flush();
fos.close();
//广播通知系统相册,使得能在相册中查看该文件夹
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
context.sendBroadcast(intent);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
至此已经完成了导出图片的所有功能,只需要使用save方法来调用这两个方法便可完成最终的导出功能
public boolean save(View view, String name,Context context) {
Bitmap bitmap = getBitmapFromView(view);
if(saveBitmap(bitmap, name,context)) return true;
return false;
}
网友评论