Android相机基础开发快速实现2(拍照,录视频,加水印,扫描二维码)

第一篇文章介绍了相机的基础拍照和录制视频的功能,本篇介绍一下相机添加水印和扫描二维码功能
第一篇文章传送门:
https://www.jianshu.com/p/d273c8d6bc94

添加水印功能

//创建一个水印参数 同样是构造者模式
val watermarkOptions = WatermarkOptions.Companion.WatermarkOptionsBuilder()
     .setWatermarkView(watermark)//水印可以是自定义View
     .setPreviewShowWaterMark(true)//设置预览时是否展示水印 默认就是true
     .setMode(CameraConstant.WATER_MARK_BOTH) //只图片or只视频or全加水印,默认全加
     //设置水印的位置 下边详细说明
     .setWatermarkPosition(WatermarkPosition(CameraConstant.WATER_POSITION_BOTTOM_RIGHT, x, y))
     //设置给图片加水印后是否要保存成文件,设置false 只会返回Bitmap,就节省了一次IO操作
     .setSaveWatermarkTofile(true)
     .setCreateWatermarkFileName { 
       //给图片加水印时水印图片的名字生成函数           
     }
     .setCreateWatermarkVideoFileName { 
       //给视频加水印时水印图片的名字生成函数    
     } 
     .build()

特别说明一下水印位置的封装类Position

WatermarkPosition("位置枚举", x, y) //水印位置数据类

//位置枚举值
CameraConstant {
    const val WATER_POSITION_TOP_LEFT = 0 //左上位置 x代表marginLeft, y代表marginTop
    const val WATER_POSITION_TOP_RIGHT = 1 //右上位置 x代表marginRight, y代表marginTop
    const val WATER_POSITION_BOTTOM_LEFT = 2 //左下位置 x代表marginLeft, y代表marginBottom
    const val WATER_POSITION_BOTTOM_RIGHT = 3 //右下位置 x代表marginRight, y代表marginBottom
    const val WATER_POSITION_CENTER = 4 //中心位置 x y可以随意填写
}

controller.takePicture(
                object : ImageSavedCallback {
                    override fun onError(message: String?, code: Int) {

                    }

                    override fun onImageSaved(originUri: Uri, bitmap: Bitmap?, watermarkFile: File?) {
                          //originUri  相机拍照的原始照片文件
                          //相片需要添加水印,返回的Bitmap
                          //如果合成水印的照片需要保存成文件,返回文件对象 同时也有Bitmap 
                    }
                },
            )

controller.startRecord(
   object : VideoSavedCallback {
             override fun onVideoSaved(uri: Uri, watermarkFile: File?) {
                  //uri 原始视频文件 watermarkFile加上水印后的视频文件
             }

             override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {

             }

            override fun onWatermarkVideoProgressing(progress: Int, progressTime: Long) {
                  //录制视频完成后开始合成水印的进度      
            }

   },
 )

扫描二维码、条形码功能

controller.startScan(object : CodeAnalysisCallback{
   override fun onCodeAnalysisSuccess(
                resultList: ArrayList<String>,
                rectList: ArrayList<RectF>,
                imageWidth: Int,
                imageHeight: Int
    ) {
         // resultList 二维码中的文字,画面可能出现多个二维码
         // rectList 二维码图片对应的位置 跟resultList按顺序对应
         // 整张图片的宽高 一般不用     
    }

    override fun onCodeAnalysisFail(fail: Exception) {
         //图片分析出现异常         
    }

    override fun onCodeAnalysisComplete() {
         //图片分析结束 一般不用       
    }

})

以上就是给照片和视频加水印,以及扫描二维码功能使用方法
欢迎各位提bug和需求,感谢加星~
GitHub地址:
https://github.com/cgztzero/CameraxExtent/tree/master

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容