HarmonyOS 鸿蒙Next:怎么把yuv格式转换成jpeg

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:怎么把yuv格式转换成jpeg

  1. // 返回相机帧的回调
  2. private frameCallback: AsyncCallback<customScan.ScanFrame> =
  3. async (error: BusinessError, frameResult: customScan.ScanFrame) => {
  4. if (error) {
  5. hilog.error(0x0001, TAG, Failed to get ScanFrame by callback. Code: ${error.code}, message: ${error.message});
  6. return;
  7. }
  8. // byteBuffer相机YUV图像数组
  9. hilog.info(0x0001, TAG,
  10. Succeeded in getting ScanFrame.byteBuffer.byteLength: ${frameResult.byteBuffer.byteLength})
  11. hilog.info(0x0001, TAG, Succeeded in getting ScanFrame.width: ${frameResult.width})
  12. hilog.info(0x0001, TAG, Succeeded in getting ScanFrame.height: ${frameResult.height})
  13. this.scanFrameResult = JSON.stringify(frameResult.scanCodeRects);
  14. let newWidth = frameResult.height;
  15. if (frameResult && frameResult.scanCodeRects && frameResult.scanCodeRects.length > 0 && !this.scanFlag) {
  16. if (frameResult.scanCodeRects[0]) {
  17. this.stopCamera();
  18. this.scanCodeRect = [];
  19. this.scanFlag = true;
  20. // 码图位置信息转换
  21. this.changeToXComponent(frameResult);
  22. } else {
  23. this.scanFlag = false;
  24. }
  25. }
  26. }

customScan的扫码功能会返回一个frameResult.byteBuffer。这个是ArrayBuffer类型的。

按照正常应该是可以直接保存成jepg格式的。但是这个frameResult.byteBuffer是YUV格式的。直接用的话会失败。可不可以转化成鸿蒙能识别并展示的图片格式。

也考虑过用相机双流。但是双流好像就不能扫码了。



关于HarmonyOS 鸿蒙Next:怎么把yuv格式转换成jpeg的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

2 回复
可以首先用yuv数据 创建imagesource(需设置opt中的 pixelFormat为 yuv格式)
然后使用imagesoure.createPixelMap解码(设置decodingOption 的 desiredPixelFormat 为RGBA_8888)得到pixelmap
最后调用imagepacker.packing 方法 编码为jepg
参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#imagecreateimagesource9

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

回到顶部