前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android使用技巧:将当前摄像头预览图像保存为Bitmap对象 & 保存到本地

Android使用技巧:将当前摄像头预览图像保存为Bitmap对象 & 保存到本地

作者头像
Carson.Ho
发布2020-05-14 17:09:41
2K0
发布2020-05-14 17:09:41
举报
文章被收录于专栏:Android知识分享Android知识分享

前言

今天,carson将结合示例讲解:如何将当前摄像头预览图像保存为Bitmap对象 & 保存到本地


1. 背景

正开启摄像头预览


2. 需求

将当前摄像头预览的图像保存为Bitmap对象 & 保存到手机本地文件夹


3. 具体实现

代码语言:javascript
复制
// 步骤1:定义存储路径 
private static final String SD_PATH = "/sdcard/carsonfile/pic/";
private static final String IN_PATH = "/carsonfile/pic/";


// 步骤2:在摄像头回调数据时将数据存储为BitMap
private Camera.PreviewCallback mPreivewCallback = new Camera.PreviewCallback() {
            @Override
            public void onPreviewFrame(final byte[] data, final Camera camera) {
                // a. 异步处理
                mPreviewHandlerThread.postToWorker(new Runnable() {
                    @Override
                    public void run() {

                        // b. 获得摄像头预览Size
                        Camera.Size size = mCamera.getParameters().getPreviewSize();
                        try {
                           // c. 创建YUV对象
                            YuvImage image = new YuvImage(data, ImageFormat.NV21, size.width, size.height, null);
                            if (image != null) {

                                // d. 存为BitMap对象
                                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                                image.compressToJpeg(new Rect(0, 0, size.width, size.height), 80, stream);
                                Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size());

                                // e. 保存到文件 - 下面分析1
                                saveBitmap(mContext, bmp);
                                stream.close();
                            }
                        } catch (Exception ex) {
                            Log.e("carson", "Error:" + ex.getMessage());
                        }
                    }

                });

            }
        };

// 分析1:存到手机文件夹
public static String saveBitmap(Context context, Bitmap mBitmap) {
        String savePath;
        File filePic;
        if (Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED)) {
            savePath = SD_PATH;
        } else {
            savePath = context.getApplicationContext().getFilesDir()
                .getAbsolutePath()
                + IN_PATH;
        }
        try {
            filePic = new File(savePath + generateFileName() + ".jpg");
            if (!filePic.exists()) {
                filePic.getParentFile().mkdirs();
                filePic.createNewFile();
            }
            FileOutputStream fos = new FileOutputStream(filePic);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

        Log.i(TAG, "carsonho:filePic.getAbsolutePath():%s", filePic.getAbsolutePath());

        return filePic.getAbsolutePath();
    }

    private static String generateFileName() {
        return UUID.randomUUID().toString();
    }
    
// 步骤3:设置回调
mCamera.setPreviewCallBack(mPreivewCallback);

4. 总结

接下来我将继续介绍 Android开发中的相关知识,感兴趣的同学可以继续关注本人博客Carson_Ho的开发笔记

请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 背景
  • 2. 需求
  • 3. 具体实现
  • 4. 总结
  • 请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档