android开发实现view转bitmap保存到手机相册
直接贴代码,可以根据代码自行测试
//view转bitmap:
public void SaveBitmapFromView(View view) {
int w = view.getWidth();
int h = view.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c =new Canvas(bmp);
view.layout(0, 0, w, h);
view.draw(c);
// 缩小图片
Matrix matrix =new Matrix();
matrix.postScale(0.5f,0.5f); //长和宽放大缩小的比例
bmp = Bitmap.createBitmap(bmp,0,0, bmp.getWidth(),bmp.getHeight(),matrix,true);
DateFormat format =new SimpleDateFormat("yyyyMMddHHmmss");
saveBitmap(bmp,format.format(new Date())+".JPEG");
}
/* 保存文件,文件名为当前日期*/
public void saveBitmap(Bitmap bitmap, String bitName){
String fileName;
File file;
if(Build.BRAND .equals("Xiaomi") ){// 小米手机
fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/"+bitName;
}else{// Meizu 、Oppo
fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+bitName;
}
file =new File(fileName);
if(file.exists()){
file.delete();
}
FileOutputStream out;
try{
out =new FileOutputStream(file);
// 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在相册中
if(bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out))
{
out.flush();
out.close();
// 插入图库
MediaStore.Images.Media.insertImage(this.getContentResolver(), file.getAbsolutePath(), bitName, null);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
// 发送广播,通知刷新图库的显示
this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fileName)));
}
到这里如果您进行测试并没有在手机相册中或者文件管理中找到上传保存的照片,那请您看下面提示:
1.在 AndroidManifest.xml 文件中, 读写权限全部添加了, 代码运行时,动态获取读写权限也判断了。但就是无法加载本地图片。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.发现是10系统的安全问题,默认代码是无权限读取本地图片,在 AndroidManifest.xml 文件中,添加2行代码:
android:requestLegacyExternalStorage="true"
tools:targetApi="q"
即可解决,希望该文章可以帮助到您!