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

    文章

    2634

    浏览量

    66220
  • HarmonyOS
    +关注

    关注

    79

    文章

    1967

    浏览量

    30018

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

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

收藏 人收藏

    评论

    相关推荐

    工业视觉在条码/二维码识别领域的应用

    工业视觉技术在条码和二维码识别领域的应用日益广泛,它通过高精度的图像处理和识别算法,实现了对条码和二维码的快速、准确识别。这项技术不仅提高了生产效率,还降低了人工错误的可能性,确保了产
    的头像 发表于 11-18 16:28 132次阅读
    工业视觉在条码/<b class='flag-5'>二维码</b>识别领域的应用

    工业二维码器在电子制造业中的应用

    工业二维码器在电子制造业中的应用主要体现在以下几个方面:▲生产追溯管理工业二维码器通过对电子产品上的二维码进行快速扫描,实现了高效、
    的头像 发表于 11-13 16:19 135次阅读
    工业<b class='flag-5'>二维码</b>读<b class='flag-5'>码</b>器在电子制造业中的应用

    二维码识读设备有哪些类型

    随着二维码应用的日益普及,各类二维码识读设备也应运而生。这些设备不仅极大地方便了我们的日常生活,也为企业提供了更加高效便捷的服务。那么,你知道二维码识读设备都有哪些类型吗?让我们一起来了解一下。据
    的头像 发表于 11-05 16:10 101次阅读
    <b class='flag-5'>二维码</b>识读设备有哪些类型

    二维码扫描头设备嵌入到闸机上,实现扫手机屏幕完成签到签退

    在现代社会,随着科技的飞速发展,二维码技术已经渗透到我们生活的方方面面,特别是在门禁管理、签到签退等场景中,二维码扫描头设备的嵌入应用极大地提升了管理效率和用户体验。本文将探讨二维码
    的头像 发表于 09-18 15:45 227次阅读
    <b class='flag-5'>二维码</b>扫描头设备嵌入到闸机上,实现扫手机屏幕<b class='flag-5'>码</b>完成签到签退

    工业二维码扫描设备如何助力流水线生产?

    工业二维码扫描设备被广泛应用于现代工厂的流水线作业中,它们能够高效、准确地读取移动中的二维码。这些扫器通常被设计为固定式或手持式,以适应不同的生产环境和需求。固定式扫器安装在特定位
    的头像 发表于 08-12 14:56 231次阅读
    工业<b class='flag-5'>二维码</b>扫描设备如何助力流水线生产?

    如何为柜式终端设备选配(集成)二维码模块?

    随着二维码技术在各行各业的广泛应用,柜式终端设备如何高效集成二维码模块成为行业关注焦点。针对这一需求,本文将深入探讨选择与集成二维码模块的关键要素,助力企业精准匹配,提升终端设备性能。
    的头像 发表于 08-05 15:48 233次阅读
    如何为柜式终端设备选配(集成)<b class='flag-5'>二维码</b>模块?

    Labview生成二维码

     Labview 的一个Demo,生成二维码
    发表于 08-01 17:12 6次下载

    二维码器/二维码读取设备嵌入园区闸机系统中的应用

    二维码阅读设备集成至闸机系统中,主要功能是通过扫描用户的二维码通行证来实施园区出入口的自动收费。此技术凭借二维码的便利性及扫描设备的高效性
    的头像 发表于 06-05 14:46 309次阅读
    <b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>器/<b class='flag-5'>二维码</b>读取设备嵌入园区闸机<b class='flag-5'>系统</b>中的应用

    机器视觉系统读取二维码-软硬件配置方案

    机器视觉系统读取二维码-软硬件配置方案
    的头像 发表于 05-24 00:56 572次阅读
    机器视觉<b class='flag-5'>系统</b>读取<b class='flag-5'>二维码</b>-软硬件配置方案

    二维码模块嵌入到电梯设备里

    二维码模块在电梯设备中的应用1.二维码模块的基本介绍二维码模块是一种基于自动识别
    的头像 发表于 05-08 10:40 333次阅读
    <b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块嵌入到电梯设备里

    ELF 1技术贴|如何在开发板上生成二维码图像

    在开发应用程序时,常常需要生成二维码以便于用户通过扫描快速访问信息。为了实现这一功能开发者通常选用QRencode专为生成二维码图像设计的开源库。然而,要在特定平台上使用QRencod
    的头像 发表于 05-07 14:54 643次阅读
    ELF 1<b class='flag-5'>技术</b>贴|如何在开发板上<b class='flag-5'>生成</b><b class='flag-5'>二维码</b>图像

    飞凌嵌入式ElfBoard ELF 1板卡-在线二维码生成

    在线二维码生成器允许用户将文本、网址、图片或其他数据转换为二维码形式。二维码是一种特殊类型的条形码,它可以通过扫描来快速识别和读取信息。在线二维码
    发表于 04-24 17:00

    怎么在Framewin里显示二维码

    各位前辈好,刚刚开始使用STemWin。现在一个Framewin里显示二维码,在Framewin初始化里调用二维码函数没有反应。请问需要怎么调用?
    发表于 04-16 08:27

    远距离二维码扫描器如何选择?看看以下三款远距离二维码模块

    随着二维码相关技术及硬件的普及与低成本化,二维条码扫描设备的应用被人们广为熟知,应用的行业也众多。然而,在某些场景中,由于需要远距离扫描二维码(条码远距离识别),传统的扫
    的头像 发表于 03-21 15:41 655次阅读
    远距离<b class='flag-5'>二维码</b>扫描器如何选择?看看以下三款远距离<b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块

    Labview调用Halcon识别二维码

    Labview调用Halcon识别二维码 可一次识别多个二维码 使用Labview 2020编辑,halcon的版本是 19.11,32位
    发表于 02-21 16:31