0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙系统生成二维码技术

OpenHarmony技术社区 来源:鸿蒙技术社区 作者:软通动力HOS 2021-10-19 09:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在实际应用开发中,时不时的会遇到 AI 领域相关的一些技术,本节主要详细讲述一下生成二维码技术,二维码可能涉及在各领域中,如:社交或通讯类应用、购物或支付类应用等。

所以对于 HarmonyOS 开发者而言,也需要了解和掌握 HarmonyOS AI 领域相关技术,这对于每一个 HarmonyOS 开发者,也是一项必不可少的专业技能。

功能介绍

生成二维码主要根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过二维码字节流生成二维码图片。

开发指南

①创建二维码

实例化接口,获取二维码侦测器:
IBarcodeDetectorbarcodeDetector
=VisionManager.getBarcodeDetector(QRCodeAbilitySlice.this);

定义码生成图像的尺寸:
finalintSAMPLE_LENGTH=500;
根据图像的大小,分配字节流数组的空间:
byte[]byteArray=newbyte[SAMPLE_LENGTH*SAMPLE_LENGTH*4];
调用 IBarcodeDetector 的 detect() 方法,根据输入的字符串信息 barText 生成相应的二维码图片字节流:
barcodeDetector.detect(barText,byteArray,SAMPLE_LENGTH,SAMPLE_LENGTH);
释放侦测器:
barcodeDetector.release();
通过 SourceOptions 指定数据源的格式信息:
ImageSource.SourceOptionssrcOpts=newImageSource.SourceOptions();
定义图片格式:
srcOpts.formatHint="image/png";
创建图片源:
ImageSourceimgSource=ImageSource.create(byteArray,srcOpts);
创建图像解码选项:
ImageSource.DecodingOptionsdecodingOpts=new
ImageSource.DecodingOptions();
decodingOpts.desiredPixelFormat=PixelFormat.ARGB_8888;

通过图片源创建 PixelMap:
PixelMappMap=imgSource.createPixelmap(decodingOpts);
赋值到图片标签
imgQrCode.setPixelMap(pMap);
释放资源:
barcodeDetector.release();
imgSource.release();
if(pMap!=null)
{
pMap.release();
}

断开与能力引擎的连接:
VisionManager.destroy();

②定义 ConnectionCallback 回调,实现连接能力引擎成功与否后的操作

代码如下:
ConnectionCallbackconnectionCallback=newConnectionCallback(){
@Override
publicvoidonServiceConnect(){
需要生成二维码的字符串:
StringbarText="";

连接成功生成二维码:
createQRCode(barText);
}
@Override
publicvoidonServiceDisconnect(){
//Dosomethingwhenserviceconnectsunsuccessfully
}
};

③调用 VisionManager.init() 方法,将此工程的 context 和 connectionCallback作为入参,建立与能力引擎的连接

代码如下:
intresult=VisionManager.init(context,connectionCallback);

示例代码

xml 布局:


<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">

<Image
ohos:id="$+id:imgQrCode"
ohos:height="500vp"
ohos:width="500vp"
ohos:layout_alignment="center"/>

DirectionalLayout>

案例代码:

MainAbilitySlice.java
packagecom.isoftstone.qrcode.slice;

importcom.isoftstone.qrcode.ResourceTable;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.agp.components.Text;

publicclassMainAbilitySliceextendsAbilitySlice{

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
TextqrCode=(Text)findComponentById(ResourceTable.Id_qrCode_text);
qrCode.setClickedListener(component->present(newQRCodeAbilitySlice(),newIntent()));
}

@Override
publicvoidonActive(){
super.onActive();
}

@Override
publicvoidonForeground(Intentintent){
super.onForeground(intent);
}
}
QRCodeAbilitySlice.java

packagecom.isoftstone.qrcode.slice;

importcom.isoftstone.qrcode.ResourceTable;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.agp.components.Image;
importohos.ai.cv.common.ConnectionCallback;
importohos.ai.cv.common.VisionManager;
importohos.ai.cv.qrcode.IBarcodeDetector;
importohos.media.image.ImageSource;
importohos.media.image.PixelMap;
importohos.media.image.common.PixelFormat;

/**
*二维码生成
*/
publicclassQRCodeAbilitySliceextendsAbilitySlice{

privateImageimgQrCode;
@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_qrcode);
imgQrCode=(Image)findComponentById(ResourceTable.Id_imgQrCode);
}

@Override
publicvoidonActive(){
super.onActive();
ConnectionCallbackconnectionCallback=newConnectionCallback(){
@Override
publicvoidonServiceConnect(){
//需要生成二维码的字符串
StringbarText="www.baidu.com";
//连接成功生成二维码
createQRCode(barText);
}

@Override
publicvoidonServiceDisconnect(){
//Dosomethingwhenserviceconnectsunsuccessfully
}
};
//初始化,建立与能力引擎的连接
VisionManager.init(this,connectionCallback);
}

@Override
publicvoidonForeground(Intentintent){
super.onForeground(intent);
}

/**
*创建二维码
*@parambarText需要生成二维码的字符串
*/
privatevoidcreateQRCode(StringbarText){
//实例化接口,获取二维码侦测器
IBarcodeDetectorbarcodeDetector=VisionManager.getBarcodeDetector(QRCodeAbilitySlice.this);
//定义码生成图像的尺寸
finalintSAMPLE_LENGTH=500;
//根据图像的大小,分配字节流数组的空间
byte[]byteArray=newbyte[SAMPLE_LENGTH*SAMPLE_LENGTH*4];
//调用IBarcodeDetector的detect()方法,根据输入的字符串信息生成相应的二维码图片字节流
barcodeDetector.detect(barText,byteArray,SAMPLE_LENGTH,SAMPLE_LENGTH);
//释放侦测器
barcodeDetector.release();
//通过SourceOptions指定数据源的格式信息
ImageSource.SourceOptionssrcOpts=newImageSource.SourceOptions();
//定义图片格式
srcOpts.formatHint="image/png";
//创建图片源
ImageSourceimgSource=ImageSource.create(byteArray,srcOpts);
//创建图像解码选项
ImageSource.DecodingOptionsdecodingOpts=newImageSource.DecodingOptions();
decodingOpts.desiredPixelFormat=PixelFormat.ARGB_8888;
//通过图片源创建PixelMap
PixelMappMap=imgSource.createPixelmap(decodingOpts);
//赋值到图片标签
imgQrCode.setPixelMap(pMap);
//释放资源
barcodeDetector.release();
imgSource.release();
if(pMap!=null)
{
pMap.release();
}
//断开与能力引擎的连接
VisionManager.destroy();
}
}

责任编辑:haq


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2642

    浏览量

    69337
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35567

原文标题:在鸿蒙上生成二维码的方法!

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    二维码模块是什么?它和普通条码识别设备有什么不同

    在物联网技术飞速发展的今天,条码与二维码已成为信息传递的重要载体,从超市结账到工业生产溯源,从移动支付到医疗耗材管理,相关识别设备无处不在。其中,二维码模块作为核心识别部件,正凭借
    的头像 发表于 11-06 15:54 213次阅读
    <b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块是什么?它和普通条码识别设备有什么不同

    门禁二维码扫描模块使用哪个产品合适?

    在现代门禁系统中,二维码扫描模块的选择至关重要。它不仅关系到门禁管理的效率,还影响着用户的使用体验。那么,究竟哪款产品更适合作为门禁二维码扫描模块呢?答案是新大陆FM25-Std二维
    的头像 发表于 09-16 15:30 485次阅读
    门禁<b class='flag-5'>二维码</b>扫描模块使用哪个产品合适?

    哪款二维码模组适合嵌入户外取餐柜,用于扫二维码

    在智能取餐柜普及的当下,二维码模组作为核心交互组件,其性能直接影响用户体验与设备稳定性。针对户外场景的特殊需求,深圳远景达物联网推出的LV4300Pro系列二维码模组,凭借工业级设计与场景化技术优化
    的头像 发表于 09-10 15:00 445次阅读
    哪款<b class='flag-5'>二维码</b>模组适合嵌入户外取餐柜,用于扫<b class='flag-5'>二维码</b>

    【嘉楠堪智K230开发板试用体验】+二维码识别

    二维码识别 二维码识别本质上是一个通过图像处理技术定位并矫正图像中的二维码区域,然后根据其特定编码规则读取黑白模块的进制数据,并利用内置的
    发表于 08-22 20:16

    扫描条码模块、二维码模块,广泛应用于定制的手持设备

    在信息高速流转的时代,二维码作为信息承载的重要载体,推动着各类识别技术的革新。其中,扫描条码模块与二维码模块作为核心组件,衍生出了众多适配不同场景的设备,安卓手持终端便是典型代表——它以嵌入式
    的头像 发表于 08-18 15:18 408次阅读
    扫描条码模块、<b class='flag-5'>二维码</b>模块,广泛应用于定制的手持设备

    GM861条二维码识别模块用户手册

    GM861条二维码识别模块用户手册
    发表于 07-09 14:56 0次下载

    基于STM32的二维码识别源码+二维码解码库lib

    基于STM32的二维码识别源码+二维码解码库lib,推荐下载!
    发表于 05-28 22:04

    基于LockAI视觉识别模块:C++二维码识别

    二维码识别是视觉模块经常使用到的功能之一。我们将演示如何使用基于瑞芯微RV1106的LockAI视觉识别模块进行二维码识别。
    的头像 发表于 05-26 09:42 693次阅读
    基于LockAI视觉识别模块:C++<b class='flag-5'>二维码</b>识别

    基于STM32的二维码识别源码+二维码解码库lib

    基于STM32的二维码识别源码+二维码解码库lib项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-23 20:45

    为什么说二维码模块是智能终端的“眼睛”?

    系统到物流的包裹追踪,这些看似简单的扫动作背后,都离不开这个微型"视觉系统"的高效运作。在物联网技术飞速发展的今天,二维码
    的头像 发表于 05-21 14:39 643次阅读
    为什么说<b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块是智能终端的“眼睛”?

    基于RK3576开发板的二维码生成

    档介绍了如何快速上手二维码生成,包括源码工程下载、开发环境搭建、例程编译与运行。通过EASY-EAI API,用户可轻松生成二维码图片,API封装了
    的头像 发表于 05-10 15:19 951次阅读
    基于RK3576开发板的<b class='flag-5'>二维码</b><b class='flag-5'>生成</b>

    二维码读取器是干嘛的

    二维码读取器(用于二维码读取的机器),作为一种现代化的自动识别技术设备,正日益渗透到我们生活的方方面面。从商场购物到物流配送,从医疗管理到工业生产线,二维码读取器凭借其高效、准确的读取
    的头像 发表于 03-17 15:57 851次阅读
    <b class='flag-5'>二维码</b>读取器是干嘛的

    一“”当先!看二维码模组如何重塑智能门锁扫体验

    在科技日新月异的今天,智能门锁正逐步取代传统机械锁,成为现代家庭安全防护的首选。在这场门锁智能化革命中,二维码模组以其独特的识别技术和便捷的操作方式,成为智能门锁的重要组成部分。本文将深入探讨二维码
    的头像 发表于 03-12 16:17 773次阅读
    一“<b class='flag-5'>码</b>”当先!看<b class='flag-5'>二维码</b>模组如何重塑智能门锁扫<b class='flag-5'>码</b>体验

    嵌入式二维码识别引擎是什么设备?哪些场景用得到?

    在科技日新月异的今天,嵌入式技术已广泛渗透到我们生活的方方面面,其中,嵌入式二维码识别引擎作为一种高效、便捷的信息采集工具,正逐渐成为众多行业智能化升级的重要推手。本文将带您深入探索二维码识读引擎
    的头像 发表于 03-10 14:57 630次阅读
    嵌入式<b class='flag-5'>二维码</b>识别引擎是什么设备?哪些场景用得到?

    快速将二维码扫描识别模组嵌入集成到安卓一体机上使用

    模组与安卓系统、配置二维码扫描模组的参数以及测试二维码扫描模组的功能。一、在安卓一体机上安装二维码扫描模组1.1确定应用场景与模组选择在选择二维码
    的头像 发表于 02-28 15:59 812次阅读
    快速将<b class='flag-5'>二维码</b>扫描识别模组嵌入集成到安卓一体机上使用