当前位置: 首页 > news >正文

基于鸿蒙Next模拟扫图识物的一个过程

一、功能介绍(基础)
基于鸿蒙Next模拟扫图识物的一个过程,扫描到图片,提示出相关的图片内容,是一个什么东西。

二、使用场景(大类)

支付、社交、信息获取、在线调查、教育学习等等。

三、实现步骤:
第一步:上传图片,打开相册时,会有获取媒体权限的弹窗询问。
第二部:扫一扫,识别图片内容。
第三步:识别到的图片信息展示,用弹窗的形式展现出来

四、展示效果
预览器效果
 

#HarmonyOS NEXT体验官#基于鸿蒙Next模拟扫图识物的一个过程-鸿蒙开发者社区


 

#HarmonyOS NEXT体验官#基于鸿蒙Next模拟扫图识物的一个过程-鸿蒙开发者社区


五、代码实现

import abilityAccessCtrl, { Permissions } from ‘@ohos.abilityAccessCtrl’
import picker from ‘@ohos.file.picker’
import common from ‘@ohos.app.ability.common’
import promptAction from ‘@ohos.promptAction’let context = getContext(this) as common.UIAbilityContextlet permissionList: Permissions[] = [
‘ohos.permission.READ_MEDIA’,
‘ohos.permission.MEDIA_LOCATION’
]@Entry
@Component
struct Index {
@State img:string = “/common/images/img_up.png” //初始化图片
@State scanHeight:number = 0 // 扫描高度-都动画
@State isVisibility:boolean = false // 扫描框显隐控制//获取本地图片路径
getLocalPicPath() {
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select({
MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,
maxSelectNumber: 1
},
(err, photoPickerValue) => {
if (err) {
console.info(“photoPicker_err:” + err.message)
return
}
console.info(“photoPicker_Value:” + photoPickerValue.photoUris)
this.img = photoPickerValue.photoUris[0].toString()
}
)
}//相册权限获取
isAuthorize() {
let AtManager = abilityAccessCtrl.createAtManager();
AtManager.requestPermissionsFromUser(context, permissionList)
.then((data) => {
console.info(‘request permissions from user success:’ + data.authResults)
this.getLocalPicPath() //获取本地路径
})
.catch((err:Error) => {
console.info(‘request permissions from user failed:’, JSON.stringify(err) ?? ‘’)
});
}

六、代码结构及原理:
1.整体结构:
使用了ArkTS的装饰器语法,如@Entry和@Component。
2.状态管理:
组件使用@State装饰器定义了几个响应式状态变量,如scanHeight、isVisibility。这些变量的变化会自动触发UI的更新。
3.UI结构:
界面使用嵌套的Stack、Column和Row组件构建。主要包括图形选择、线条颜色选择、线宽调节等部分。
4.数据传递:
当点击"上传图片"按钮时,会调用isAuthorize()回调函数,先获取媒体权限,确认授权之后,在调用getLocalPicPath()回调函数,获取选择的图片。点击“扫一扫”,识别上传图片内容
5.样式设置:
大量使用了链式调用来设置组件的样式,如字体大小、颜色、边距等。
6.响应式设计:
通过@State装饰器和状态变量的绑定,实现了界面的响应式更新。当用户进行操作时,相关的状态变量会更新,从而触发UI的重新渲染。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Transformer大模型在训练过程中所需的计算量
  • C语言:文件(写入,读取)
  • Angular路由使用
  • 培训第三十四天(初步了解Docker与套接字的应用)
  • [数据集][目标检测]木材缺陷检测数据集VOC+YOLO格式2383张10类别
  • C++学习笔记之数据结构
  • Prometheus 服务发现
  • k8s Unable to fetch container log stats failed to get fsstats for
  • 常规方法调用Mapper对象bean,批量插入数据
  • API接口安全101:基础概念与最佳实践
  • 企业高性能web服务器【Nginx详解】
  • jmeter简单发送接口
  • 龙门吊(天车)防撞方案
  • HarmonyOS开发实战:应用权限/通知设置跳转方案
  • ZooKeeper入门及核心知识点整理
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C++类中的特殊成员函数
  • CSS 提示工具(Tooltip)
  • go append函数以及写入
  • k个最大的数及变种小结
  • laravel 用artisan创建自己的模板
  • Linux Process Manage
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • vue-loader 源码解析系列之 selector
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 大整数乘法-表格法
  • 每天一个设计模式之命令模式
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #预处理和函数的对比以及条件编译
  • ( 10 )MySQL中的外键
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (web自动化测试+python)1
  • (二)斐波那契Fabonacci函数
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一) storm的集群安装与配置
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)nsfocus-绿盟科技笔试题目
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET Framework 3.5安装教程
  • .Net IOC框架入门之一 Unity
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 指南:抽象化实现的基类
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net的socket示例
  • .Net接口调试与案例
  • .NET开发不可不知、不可不用的辅助类(一)
  • @font-face 用字体画图标
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [ C++ ] 类和对象( 下 )