美文网首页
Android使用技巧:将当前摄像头预览图像保存为Bitmap对

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

作者: maiduoduo | 来源:发表于2020-05-21 15:20 被阅读0次

    前言

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


    1. 背景

    正开启摄像头预览


    2. 需求

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


    3. 具体实现

    // 步骤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的开发笔记

    请点赞!因为你的鼓励是我写作的最大动力!

    相关文章阅读
    Android开发:最全面、最易懂的Android屏幕适配解决方案
    Android事件分发机制详解:史上最全面、最易懂
    Android开发:史上最全的Android消息推送解决方案
    Android开发:最全面、最易懂的Webview详解
    Android开发:JSON简介及最全面解析方法!
    Android四大组件:Service服务史上最全面解析
    Android四大组件:BroadcastReceiver史上最全面解析

    作者:Carson_Ho
    链接:https://www.jianshu.com/p/b80438e42e55
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:Android使用技巧:将当前摄像头预览图像保存为Bitmap对

          本文链接:https://www.haomeiwen.com/subject/fnozohtx.html