HarmonyOS 鸿蒙Next二维码识别

HarmonyOS 鸿蒙Next二维码识别 相机无法识别二维码 用了两个库 相机:https://gitee.com/chen-xi-163/Camera/tree/master 二维码:https://gitee.com/openharmony-tpc/zxing 通过相机的 mReceiver.on('imageArrival' 函数回调返回的图片数据放到 zxing 里面去解析,无法解析出二维码内容 帮忙看一下解析的问题,能否提供更完整的 demo


更多关于HarmonyOS 鸿蒙Next二维码识别的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

CameraService.ets中修改

1、新增两个属性

export default class CameraService {
  xxxxx
  xxxxx
  //添加属性
  private isRun: boolean = true
  private timeId: number = 0

2、替换initPreviewFrame方法

private async initPreviewFrame() {
  let mReceiver = image.createImageReceiver(
    this.previewProfile.size.width,
    this.previewProfile.size.height,
    2000,
    8
  );
  let mSurfaceId = await mReceiver.getReceivingSurfaceId();
  this.cameraOutput = this.cameraManager.createPreviewOutput(this.previewProfile, mSurfaceId);
  this.captureSession.addOutput(this.cameraOutput);
  mReceiver.on('imageArrival', async () => {
    let imageData = await mReceiver.readNextImage();
    let imageComponent = await imageData.getComponent(4);
    let imageBuffer = imageComponent.byteBuffer;
    this.cameraLifecycleProxy.onCaptureSuccess(this.curMode, imageBuffer);
    // todo hj decode
    // let result = await this.decode(imageData, imageComponent)
    //添加
    if (this.isRun) {
      this.isRun = false
      let result = await this.decode(imageData, imageComponent)
      console.log("decodeText==" + result)
    }
    // console.log("decodeText==" + result)
    await imageData.release();
  })
}

3、修改decode方法

async decode(imageData: image.Image, imageComponent: image.Component): Promise<String | undefined> {
  try {
    let width = imageData.size.width;
    let height = imageData.size.height;
    //添加
    const int32Array = new Uint8ClampedArray(imageComponent.byteBuffer)
    // let task: taskpool.Task = new taskpool.Task(func, int32Array, width, height)
    // let luminanceSource1 = await taskpool.execute(task) as RGBLuminanceSource
    // Logger.error(this.tag,"Task.luminanceSource1==="+luminanceSource1)
    const luminanceSource = new RGBLuminanceSource(int32Array, width, height)
    // const binaryBitmap = new BinaryBitmap(new HybridBinarizer(luminanceSource))
    //添加
    const binaryBitmap = new BinaryBitmap(new HybridBinarizer(luminanceSource))
    const reader = new MultiFormatReader()
    const hints: Map<DecodeHintType, Array<BarcodeFormat>> = new Map();
    hints.set(DecodeHintType.POSSIBLE_FORMATS, [BarcodeFormat.CODABAR, BarcodeFormat.QR_CODE]);
    reader.setHints(hints);
    let result = reader.decode(binaryBitmap);
    let text = result.getText();
    //添加
    this.isRun = true
    return text
  } catch (e) {
    this.timeId = setTimeout(() => {
      this.isRun = true
    }, 100)
    console.log("decodeText.e==" + e)
  }
}

更多关于HarmonyOS 鸿蒙Next二维码识别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对“HarmonyOS 鸿蒙Next二维码识别”的问题,以下是一个简洁且专业的回答:

HarmonyOS鸿蒙Next系统中的二维码识别功能,通常依赖于系统内置的API或第三方库来实现。在鸿蒙系统中,开发者可以利用系统提供的扫描框架或集成专门的二维码识别库来完成二维码的扫描与识别任务。

具体来说,开发者可能需要:

  1. 引入相关的二维码识别库或模块,这些库可能提供了二维码的解码功能。
  2. 配置扫描界面,包括设置扫描框、触发扫描的按钮等UI元素。
  3. 调用识别库提供的API进行二维码扫描,并处理扫描结果,如解析出二维码中的信息。

需要注意的是,二维码识别的准确性和效率可能受到多种因素的影响,如二维码的清晰度、光线条件、扫描设备的性能等。因此,在开发过程中,开发者需要对这些因素进行充分的测试和考虑。

如果开发者在鸿蒙系统中实现二维码识别功能时遇到问题,建议查阅鸿蒙系统的官方文档或相关开发指南,以获取更详细的技术支持和指导。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部