牛骨文教育服务平台(让学习变的简单)
博文笔记

Android保存Bitmap为本地文件

创建时间:2017-08-05 投稿人: 浏览次数:845

保存图片
* 图片在sd卡中,但是图库没有
* 系统每次遍历sd卡时,会把sd卡中的所有多媒体文件(图片、音频、视频)都在MediaStore数据库中保存一个索引,这个索引包含的字段有文件名、文件保存路径、标题、艺术家、持续时间
* 每次启动图库时,图库应用并不会去遍历sd卡,检测图片文件,而是直接从MediaStore数据库读取图片的索引,从而读取到这张图片
保存图片至SD卡

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(new File("sdcard/dazuo.png"));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //保存图片
    copyBm.compress(CompressFormat.PNG, 100, fos);

* 系统每次收到SD卡就绪广播时,都会去遍历sd卡的所有文件和文件夹,把遍历到的所有多媒体文件都在MediaStore数据库保存一个索引,这个索引包含多媒体文件的文件名、路径、大小
* 图库每次打开时,并不会去遍历sd卡获取图片,而是通过内容提供者从MediaStore数据库中获取图片的信息,然后读取该图片
* 系统开机或者点击加载sd卡按钮时,系统会发送sd卡就绪广播,我们也可以手动发送就绪广播

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
    intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
    sendBroadcast(intent);
  File file = new File(Environment.getExternalStorageDirectory(),
                    "aaaa.jpg");
            FileOutputStream stream = null;
            try {
                stream = new FileOutputStream(file);
                // 保存图片
                copyBitmap.compress(CompressFormat.JPEG, 100, stream);

                // 发送sdcard挂载的广播
                Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
                intent.setData(Uri.fromFile(Environment
                        .getExternalStorageDirectory()));
                sendBroadcast(intent);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                if (stream != null) {
                    try {
                        stream.close();
                        stream = null;
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }

参考:Android 图片处理

阅读更多
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。