0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙系統(tǒng)生成二維碼技術(shù)

OpenHarmony技術(shù)社區(qū) ? 來源:鴻蒙技術(shù)社區(qū) ? 作者:軟通動力HOS ? 2021-10-19 09:17 ? 次閱讀

在實際應(yīng)用開發(fā)中,時不時的會遇到 AI 領(lǐng)域相關(guān)的一些技術(shù),本節(jié)主要詳細講述一下生成二維碼技術(shù),二維碼可能涉及在各領(lǐng)域中,如:社交或通訊類應(yīng)用、購物或支付類應(yīng)用等。

所以對于 HarmonyOS 開發(fā)者而言,也需要了解和掌握 HarmonyOS AI 領(lǐng)域相關(guān)技術(shù),這對于每一個 HarmonyOS 開發(fā)者,也是一項必不可少的專業(yè)技能。

功能介紹

生成二維碼主要根據(jù)開發(fā)者給定的字符串信息和二維碼圖片尺寸,返回相應(yīng)的二維碼圖片字節(jié)流。調(diào)用方可以通過二維碼字節(jié)流生成二維碼圖片。

開發(fā)指南

①創(chuàng)建二維碼

實例化接口,獲取二維碼偵測器:
IBarcodeDetectorbarcodeDetector
=VisionManager.getBarcodeDetector(QRCodeAbilitySlice.this);

定義碼生成圖像的尺寸:
finalintSAMPLE_LENGTH=500;
根據(jù)圖像的大小,分配字節(jié)流數(shù)組的空間:
byte[]byteArray=newbyte[SAMPLE_LENGTH*SAMPLE_LENGTH*4];
調(diào)用 IBarcodeDetector 的 detect() 方法,根據(jù)輸入的字符串信息 barText 生成相應(yīng)的二維碼圖片字節(jié)流:
barcodeDetector.detect(barText,byteArray,SAMPLE_LENGTH,SAMPLE_LENGTH);
釋放偵測器:
barcodeDetector.release();
通過 SourceOptions 指定數(shù)據(jù)源的格式信息:
ImageSource.SourceOptionssrcOpts=newImageSource.SourceOptions();
定義圖片格式:
srcOpts.formatHint="image/png";
創(chuàng)建圖片源:
ImageSourceimgSource=ImageSource.create(byteArray,srcOpts);
創(chuàng)建圖像解碼選項:
ImageSource.DecodingOptionsdecodingOpts=new
ImageSource.DecodingOptions();
decodingOpts.desiredPixelFormat=PixelFormat.ARGB_8888;

通過圖片源創(chuàng)建 PixelMap:
PixelMappMap=imgSource.createPixelmap(decodingOpts);
賦值到圖片標簽
imgQrCode.setPixelMap(pMap);
釋放資源:
barcodeDetector.release();
imgSource.release();
if(pMap!=null)
{
pMap.release();
}

斷開與能力引擎的連接:
VisionManager.destroy();

②定義 ConnectionCallback 回調(diào),實現(xiàn)連接能力引擎成功與否后的操作

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

連接成功生成二維碼:
createQRCode(barText);
}
@Override
publicvoidonServiceDisconnect(){
//Dosomethingwhenserviceconnectsunsuccessfully
}
};

③調(diào)用 VisionManager.init() 方法,將此工程的 context 和 connectionCallback作為入?yún)?,建立與能力引擎的連接

代碼如下:
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);
}

/**
*創(chuàng)建二維碼
*@parambarText需要生成二維碼的字符串
*/
privatevoidcreateQRCode(StringbarText){
//實例化接口,獲取二維碼偵測器
IBarcodeDetectorbarcodeDetector=VisionManager.getBarcodeDetector(QRCodeAbilitySlice.this);
//定義碼生成圖像的尺寸
finalintSAMPLE_LENGTH=500;
//根據(jù)圖像的大小,分配字節(jié)流數(shù)組的空間
byte[]byteArray=newbyte[SAMPLE_LENGTH*SAMPLE_LENGTH*4];
//調(diào)用IBarcodeDetector的detect()方法,根據(jù)輸入的字符串信息生成相應(yīng)的二維碼圖片字節(jié)流
barcodeDetector.detect(barText,byteArray,SAMPLE_LENGTH,SAMPLE_LENGTH);
//釋放偵測器
barcodeDetector.release();
//通過SourceOptions指定數(shù)據(jù)源的格式信息
ImageSource.SourceOptionssrcOpts=newImageSource.SourceOptions();
//定義圖片格式
srcOpts.formatHint="image/png";
//創(chuàng)建圖片源
ImageSourceimgSource=ImageSource.create(byteArray,srcOpts);
//創(chuàng)建圖像解碼選項
ImageSource.DecodingOptionsdecodingOpts=newImageSource.DecodingOptions();
decodingOpts.desiredPixelFormat=PixelFormat.ARGB_8888;
//通過圖片源創(chuàng)建PixelMap
PixelMappMap=imgSource.createPixelmap(decodingOpts);
//賦值到圖片標簽
imgQrCode.setPixelMap(pMap);
//釋放資源
barcodeDetector.release();
imgSource.release();
if(pMap!=null)
{
pMap.release();
}
//斷開與能力引擎的連接
VisionManager.destroy();
}
}

責任編輯:haq


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2632

    瀏覽量

    66054
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1956

    瀏覽量

    29907

原文標題:在鴻蒙上生成二維碼的方法!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    二維碼掃描頭設(shè)備嵌入到閘機上,實現(xiàn)掃手機屏幕完成簽到簽退

    在現(xiàn)代社會,隨著科技的飛速發(fā)展,二維碼技術(shù)已經(jīng)滲透到我們生活的方方面面,特別是在門禁管理、簽到簽退等場景中,二維碼掃描頭設(shè)備的嵌入應(yīng)用極大地提升了管理效率和用戶體驗。本文將探討二維碼
    的頭像 發(fā)表于 09-18 15:45 ?146次閱讀
    <b class='flag-5'>二維碼</b>掃描頭設(shè)備嵌入到閘機上,實現(xiàn)掃手機屏幕<b class='flag-5'>碼</b>完成簽到簽退

    工業(yè)二維碼掃描設(shè)備如何助力流水線生產(chǎn)?

    工業(yè)二維碼掃描設(shè)備被廣泛應(yīng)用于現(xiàn)代工廠的流水線作業(yè)中,它們能夠高效、準確地讀取移動中的二維碼。這些掃器通常被設(shè)計為固定式或手持式,以適應(yīng)不同的生產(chǎn)環(huán)境和需求。固定式掃器安裝在特定位
    的頭像 發(fā)表于 08-12 14:56 ?186次閱讀
    工業(yè)<b class='flag-5'>二維碼</b>掃描設(shè)備如何助力流水線生產(chǎn)?

    如何為柜式終端設(shè)備選配(集成)二維碼模塊?

    隨著二維碼技術(shù)在各行各業(yè)的廣泛應(yīng)用,柜式終端設(shè)備如何高效集成二維碼模塊成為行業(yè)關(guān)注焦點。針對這一需求,本文將深入探討選擇與集成二維碼模塊的關(guān)鍵要素,助力企業(yè)精準匹配,提升終端設(shè)備性能。
    的頭像 發(fā)表于 08-05 15:48 ?172次閱讀
    如何為柜式終端設(shè)備選配(集成)<b class='flag-5'>二維碼</b>模塊?

    Labview生成二維碼

    ?Labview 的一個Demo,生成二維碼。
    發(fā)表于 08-01 17:12 ?6次下載

    二維碼器/二維碼讀取設(shè)備嵌入園區(qū)閘機系統(tǒng)中的應(yīng)用

    二維碼閱讀設(shè)備集成至閘機系統(tǒng)中,主要功能是通過掃描用戶的二維碼通行證來實施園區(qū)出入口的自動收費。此技術(shù)憑借二維碼的便利性及掃描設(shè)備的高效性
    的頭像 發(fā)表于 06-05 14:46 ?254次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>器/<b class='flag-5'>二維碼</b>讀取設(shè)備嵌入園區(qū)閘機<b class='flag-5'>系統(tǒng)</b>中的應(yīng)用

    機器視覺系統(tǒng)讀取二維碼-軟硬件配置方案

    機器視覺系統(tǒng)讀取二維碼-軟硬件配置方案
    的頭像 發(fā)表于 05-24 00:56 ?475次閱讀
    機器視覺<b class='flag-5'>系統(tǒng)</b>讀取<b class='flag-5'>二維碼</b>-軟硬件配置方案

    二維碼模塊嵌入到電梯設(shè)備里

    二維碼模塊在電梯設(shè)備中的應(yīng)用1.二維碼模塊的基本介紹二維碼模塊是一種基于自動識別
    的頭像 發(fā)表于 05-08 10:40 ?282次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊嵌入到電梯設(shè)備里

    ELF 1技術(shù)貼|如何在開發(fā)板上生成二維碼圖像

    在開發(fā)應(yīng)用程序時,常常需要生成二維碼以便于用戶通過掃描快速訪問信息。為了實現(xiàn)這一功能開發(fā)者通常選用QRencode專為生成二維碼圖像設(shè)計的開源庫。然而,要在特定平臺上使用QRencod
    的頭像 發(fā)表于 05-07 14:54 ?608次閱讀
    ELF 1<b class='flag-5'>技術(shù)</b>貼|如何在開發(fā)板上<b class='flag-5'>生成</b><b class='flag-5'>二維碼</b>圖像

    飛凌嵌入式ElfBoard ELF 1板卡-在線二維碼生成

    在線二維碼生成器允許用戶將文本、網(wǎng)址、圖片或其他數(shù)據(jù)轉(zhuǎn)換為二維碼形式。二維碼是一種特殊類型的條形碼,它可以通過掃描來快速識別和讀取信息。在線二維碼
    發(fā)表于 04-24 17:00

    怎么在Framewin里顯示二維碼

    各位前輩好,剛剛開始使用STemWin?,F(xiàn)在一個Framewin里顯示二維碼,在Framewin初始化里調(diào)用二維碼函數(shù)沒有反應(yīng)。請問需要怎么調(diào)用?
    發(fā)表于 04-16 08:27

    遠距離二維碼掃描器如何選擇?看看以下三款遠距離二維碼模塊

    隨著二維碼相關(guān)技術(shù)及硬件的普及與低成本化,二維條碼掃描設(shè)備的應(yīng)用被人們廣為熟知,應(yīng)用的行業(yè)也眾多。然而,在某些場景中,由于需要遠距離掃描二維碼(條碼遠距離識別),傳統(tǒng)的掃
    的頭像 發(fā)表于 03-21 15:41 ?603次閱讀
    遠距離<b class='flag-5'>二維碼</b>掃描器如何選擇?看看以下三款遠距離<b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊

    Labview調(diào)用Halcon識別二維碼

    Labview調(diào)用Halcon識別二維碼 可一次識別多個二維碼 使用Labview 2020編輯,halcon的版本是 19.11,32位
    發(fā)表于 02-21 16:31

    怎樣快速選擇二維碼掃描儀模組

    二維碼掃描儀模組的應(yīng)用需求場景很多,除了我們生活中比較常見的支付場景,如在智慧交通的車載二維碼收費、自動售賣及金融類POS等在內(nèi)的各種嵌入集成應(yīng)用中,內(nèi)置的硬解碼掃窗上都配置有這種類型的二維
    的頭像 發(fā)表于 01-11 14:30 ?357次閱讀
    怎樣快速選擇<b class='flag-5'>二維碼</b>掃描儀模組

    為什么很多自助設(shè)備要嵌入二維碼模塊?一二維以及長距離掃描頭

    隨著行業(yè)競爭的愈發(fā)激烈,很多自助設(shè)備廠商都在節(jié)約成本,提高工作效率上下功夫。而條碼技術(shù),尤其是二維碼識讀技術(shù)應(yīng)用,無論是在提升用戶體驗、降低成本、提高工作效率,還是提升系統(tǒng)的穩(wěn)定性和可
    的頭像 發(fā)表于 11-21 15:05 ?495次閱讀
    為什么很多自助設(shè)備要嵌入<b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊?一<b class='flag-5'>維</b><b class='flag-5'>二維</b>以及長距離掃描頭

    可以用單片機生成二維碼嗎?

    可以用單片機生成二維碼嗎 有沒有具體的實例
    發(fā)表于 10-27 08:05