使用相机前先确认在 AndroidMenifest.xml
文件中加入了如下权限声明:
<!-- 请求访问使用照相设备 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 开启闪光灯权限 -->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
同时也要检测设备是否支持相机,使用以下代码检测:
// 如果不支持摄像头显示警告信息
if (CameraHelper.showAlertIfNotSupportCamera(activity)) return;
其中 activity
参数是程序所在的上下文 Context 对象。
首先获取 TuCameraOption 的对象,如下:
TuCameraOption option = new TuCameraOption();
然后对 option
进行属性配置,比如保存到相册、启用滤镜功能等。
然后使用配置好了的 option
获取相机控制器 TuCameraFragment 的对象,并对其设置委托代理,如下:
TuCameraFragment fragment = option.fragment();
fragment.setDelegate(this);
fragment.setDelegate(this)
是对相机设置委托,该代码所在的类需要实现接口 TuCameraFragmentDelegate,并实现该接口下的三个抽象方法,分别是:
// 获取一个拍摄结果
void onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result);
// 获取一个拍摄结果 (异步方法)
boolean onTuCameraFragmentCapturedAsync(TuCameraFragment fragment, TuSdkResult result);
// 请求从相机界面跳转到相册界面
void onTuAlbumDemand(TuCameraFragment fragment);
当拍照结束时,程序会自动调用 onTuCameraFragmentCaptured()
方法,可以在此方法中取得拍照结果。
当设置 option.setDisplayAlbumPoster(true);
时,相机左下角会显示相册入口,当点击该入口的时候程序会自动调用 onTuAlbumDemand()
方法,需要自己在该方法中实现跳转到相册的处理逻辑。
当取得相机控制器对象之后,可以使用以下方式启动相机并全屏显示:
TuSdkHelperComponent componentHelper = new TuSdkHelperComponent(activity);
componentHelper.presentModalNavigationActivity(fragment, true);
通过对 TuCameraOption 类属性的指定可以方便的对相机各个属性进行配置。
option.setComponentClazz(TuCameraFragment.class);
当需要继承 TuCameraFragment 类以重写相机的某些属性或功能的时候,需要将子类作为该方法的参数,这样打开相机时就会调用子类中重写的方法。
option.setRootViewLayoutId(TuCameraFragment.getLayoutId());
当需要给相机界面指定一个新的界面的时候使用该方法,将新的界面的布局资源 ID 放到该方法参数中。
保存到临时文件 (默认不保存, 当设置为 true 时, TuSdkResult.imageFile, 处理完成后将自动清理原始图片)
option.setSaveToTemp(true);
保存到系统相册 (默认不保存, 当设置为 true 时, TuSdkResult.sqlInfo, 处理完成后将自动清理原始图片)
option.setSaveToAlbum(true);
option.setSaveToAlbumName("TuSdk");
option.setDisplayAlbumPoster(false);
在多功能相册组件中,进入相机时,才会打开该选项。点击相册入口,可以在相册和相机之间跳转。 如果用户在单独使用相机时打开了该选项,需要自己处理点击相册的事件。
拍摄后自动释放相机,节省手机内存, 需要手动再次启动
option.setAutoReleaseAfterCaptured(false);
默认为90,设置范围是 0-100,如果设置为0,将保存为 PNG 格式
option.setOutputCompress(90);
默认为0,全屏显示
option.setCameraViewRatio(1f);
默认为 CameraConfigs.CameraFacing.Front
option.setAvPostion(CameraConfigs.CameraFacing.Front);
默认为全屏
option.setOutputSize(new TuSdkSize(1440, 1920));
option.setDefaultFlashMode(Camera.Parameters.FLASH_MODE_OFF);
默认为关闭
option.setEnableFilters(true);
默认不显示, 如果已经设置了 setEnableFilters(false), 那么 setShowFilterDefault() 将失效
option.setShowFilterDefault(true);
option.setGroupFilterCellWidthDP(60);
option.setFilterBarHeightDP(80);
默认资源 ID 为 tusdk_impl_component_widget_group_filter_group_view
,如需自定义请继承自 GroupFilterGroupView
option.setGroupTableCellLayoutId(GroupFilterGroupView.getLayoutId());
默认资源 ID 为 tusdk_impl_component_widget_group_filter_item_view
,如需自定义请继承自 GroupFilterItemView
option.setFilterTableCellLayoutId(GroupFilterItemView.getLayoutId());
滤镜名称参考 TuSDK.bundle/others/lsq_tusdk_configs.json
filterGroups[]->filters[]->name lsqfilter%{Brilliant}
如果名称列表为空将显示所有滤镜
String[] filters = { "SkinNature", "SkinPink", "SkinJelly",
"SkinNoir",
"SkinRuddy", "SkinPowder", "SkinSugar" };
option.setFilterGroup(Arrays.asList(filters));
option.setSaveLastFilter(true);
option.setAutoSelectGroupDefaultFilter(true);
option.setEnableFiltersHistory(true);
option.setEnableOnlineFilter(true);
option.setDisplayFiltersSubtitles(true);
默认视图 ID 为 tusdk_impl_component_camera_focus_touch_view.xml
option.setFocusTouchViewId(TuFocusTouchView.getLayoutId());
默认为 false,输出已经处理好的图片 Bitmap
option.setOutputImageData(false);
option.setDisableContinueFoucs(true);
option.setDisableCaptureSound(true);
option.setCaptureSoundRawId(R.raw.lsq_camera_focus_beep);
option.setEnableLongTouchCapture(true);
option.setDisableFocusBeep(true);
默认 false, 取消三星默认降噪,锐化
option.setUnifiedParameters(false);
默认为 0.7f, 实时预览时,缩小到全屏大小比例,提升预览效率, 0 < mPreviewEffectScale <= 1
option.setPreviewEffectScale(0.7f);
默认为0xFF000000
option.setRegionViewColor(0xFF000000);
默认为 false,前置摄像头拍摄结果自动进行水平镜像
option.setDisableMirrorFrontFacing(true);
TuSDK 提供了三种不同的方式获得拍摄图片:
获取图片的 Bitmap 对象,此方式将不保存图片
获取图片的存储路径,此方式会将图片保存在相册中
将图片保存在临时文件中,并获取临时文件
需要设置 TuCameraOption 类的下面几个属性:
TuCameraOption option = new TuCameraOption();
// 是否保存到相册
option.setSaveToAlbum(false);
// 是否保存到临时文件
option.setSaveToTemp(false);
该方式将不会保存拍照结果,如需保存须在获得图片之后自行处理。
随后可以在 onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result)
方法中使用 result.image
获取图片的 Bitmap 对象。
需要设置 TuCameraOption 类的下面几个属性:
TuCameraOption option = new TuCameraOption();
// 是否保存到相册
option.setSaveToAlbum(true);
// 是否保存到临时文件
option.setSaveToTemp(false);
该方式会将拍摄结果保存在相册中,同时也可以通过设置
option.setSaveToAlbumName("Camera")
将图片保存到名称为 Camera 的相册中。
随后可以在 onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result)
方法中使用 result.imageSqlInfo.path
获取照片的路径。
同时,此方法还可以获取到拍摄结果的其他属性,比如拍摄时间、文件长宽等,具体可以参看 ImageSqlInfo 类的API。
需要设置 TuCameraOption 类的下面几个属性:
TuCameraOption option = new TuCameraOption();
// 是否保存到相册
option.setSaveToAlbum(false);
// 是否保存到临时文件
option.setSaveToTemp(true);
该方式将会把拍摄结果保存在临时文件中,在处理完成之后将会清理原始图片。
随后可以在 onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result)
方法中使用 result.imageFile
获取临时文件。
©2019-2024 TUTUCLOUD. All Rights Reserved. 杭州元凡视觉智能科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号