在实际应用开发中,时不时的会遇到 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技术社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论