手记

【App图片开发快速教程】相机组件的使用

启动相机

启动前的准备

使用相机前先确认在 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 类以重写相机的某些属性或功能的时候,需要将子类作为该方法的参数,这样打开相机时就会调用子类中重写的方法。

指定根视图布局资源ID

 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);

设置相机方向

默认为 CameraInfo.CAMERA_FACING_BACK

 option.setAvPostion(CameraInfo.CAMERA_FACING_BACK);

设置照片输出图片长宽

默认为全屏

 option.setOutputSize(new TuSdkSize(1440, 1920));

设置闪光灯模式

 option.setDefaultFlashMode(Camera.Parameters.FLASH_MODE_OFF);

设置是否开启滤镜支持

默认为关闭

 option.setEnableFilters(true);

是否默认显示滤镜视图

默认不显示, 如果已经设置了setEnableFilters(false), 那么setShowFilterDefault()将失效

 option.setShowFilterDefault(true);

设置滤镜组行视图宽度 (单位:DP)

 option.setGroupFilterCellWidthDP(60);

设置滤镜组选择栏高度 (单位:DP)

 option.setFilterBarHeightDP(80);

设置滤镜分组列表行视图布局资源ID

默认资源 ID 为 tusdk_impl_component_widget_group_filter_group_view,如需自定义请继承自 GroupFilterGroupView

 option.setGroupTableCellLayoutId(GroupFilterGroupView.getLayoutId());

设置滤镜列表行视图布局资源ID

默认资源 ID 为 tusdk_impl_component_widget_group_filter_item_view,如需自定义请继承自 GroupFilterItemView

 option.setFilterTableCellLayoutId(GroupFilterItemView.getLayoutId());

设置需要显示的滤镜名称列表

滤镜名称参考 TuSDK.bundle/others/lsq_tusdk_configs.json
filterGroups[]->filters[]->name lsq_filter_%{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

默认视图 ID 为 tusdk_impl_component_camera_focus_touch_view.xml

 option.setFocusTouchViewId(TuFocusTouchView.getLayoutId());

设置是否直接输出图片数据

默认为 false,输出已经处理好的图片 Bitmap

 option.setOutputImageData(false);

设置是否禁用持续自动对焦

 option.setDisableContinueFoucs(true);

禁用系统拍照声音

 option.setDisableCaptureSound(true);

自定义拍照声音RAW ID

 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 对象,此方式将不保存图片

  • 获取图片的存储路径,此方式会将图片保存在相册中

  • 将图片保存在临时文件中,并获取临时文件

获取图片的 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 获取临时文件。

原文链接:http://www.apkbus.com/blog-918768-68563.html

0人推荐
随时随地看视频
慕课网APP