作者:方雅俊 | 来源:互联网 | 2023-10-12 22:05
什么是bitmap?位图(Bitmap),又称栅格图(英语:Rastergraphics)或点阵图,是使用像素阵列(Pixel-arrayDot-matrix点阵)来表示的图像。只
什么是bitmap?
位图(Bitmap),又称栅格图(英语:Raster graphics)或点阵图,是使用像素阵列(Pixel-array/Dot-matrix点阵)来表示的图像。
只要知道,在安卓中,我们常用他来表示图片就可以了。
如何创建一个指定样式的bitmap?
通常,这个问题有很多种解法,常用的是Bitmap.createBitmap方法的多重重载,也可使用本人的博客:Android手写签名绘制
Android的文件操作
Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件。在默认状态下,文件是不能在不同程序间共享的,当用户卸载应用程序时,这些文件删除。
文件存储数据可以通过openFileOutput方法打开一个文件(如果这个文件不存在就自动创建这个文件),通过load方法来获取文件中的数据,通过deleteFile方法删除一个指定的文件。
将bitmap保存到本地的代码
private void savebitmap()
{
//因为xml用的是背景,所以这里也是获得背景
Bitmap bitmap=((BitmapDrawable)(imageView.getBackground())).getBitmap();
//创建文件,因为不存在2级目录,所以不用判断exist,要保存png,这里后缀就是png,要保存jpg,后缀就用jpg
File file=new File(Environment.getExternalStorageDirectory() +"/mfw.png");
try {
//文件输出流
FileOutputStream fileOutputStream=new FileOutputStream(file);
//压缩图片,如果要保存png,就用Bitmap.CompressFormat.PNG,要保存jpg就用Bitmap.CompressFormat.JPEG,质量是100%,表示不压缩
bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
//写入,这里会卡顿,因为图片较大
fileOutputStream.flush();
//记得要关闭写入流
fileOutputStream.close();
//成功的提示,写入成功后,请在对应目录中找保存的图片
Toast.makeText(MainActivity.this,"写入成功!目录"+Environment.getExternalStorageDirectory()+"/mfw.png",Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
//失败的提示
Toast.makeText(MainActivity.this,e.getMessage(),Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
//失败的提示
Toast.makeText(MainActivity.this,e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
注意事项
- 保存bitmap到本地是一个耗时操作,尽量不要在ui线程中操作。
- 保存到本地后,除非重启手机/相册扫描文件,否则不会自动添加到相册中,也就是仅能通过文件夹或代码读取,找到他,可以使用广播来通知。通知代码如下:
Uri uri = Uri.fromFile(file);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
- 需要保存文件的权限(在AndroidManifest文件中配置)
+ - 保存结束后记得释放bitmap
支持我
您的支持,就是我创作的最大动力
完整代码下载
完整代码下载