HarmonyOS 鸿蒙Next:怎么把yuv格式转换成jpeg
HarmonyOS 鸿蒙Next:怎么把yuv格式转换成jpeg
- // 返回相机帧的回调
- private frameCallback: AsyncCallback<customScan.ScanFrame> =
- async (error: BusinessError, frameResult: customScan.ScanFrame) => {
- if (error) {
- hilog.error(0x0001, TAG,
Failed to get ScanFrame by callback. Code: ${error.code}, message: ${error.message}
); - return;
- }
- // byteBuffer相机YUV图像数组
- hilog.info(0x0001, TAG,
Succeeded in getting ScanFrame.byteBuffer.byteLength: ${frameResult.byteBuffer.byteLength}
)- hilog.info(0x0001, TAG,
Succeeded in getting ScanFrame.width: ${frameResult.width}
) - hilog.info(0x0001, TAG,
Succeeded in getting ScanFrame.height: ${frameResult.height}
) - this.scanFrameResult = JSON.stringify(frameResult.scanCodeRects);
- let newWidth = frameResult.height;
- if (frameResult && frameResult.scanCodeRects && frameResult.scanCodeRects.length > 0 && !this.scanFlag) {
- if (frameResult.scanCodeRects[0]) {
- this.stopCamera();
- this.scanCodeRect = [];
- this.scanFlag = true;
- // 码图位置信息转换
- this.changeToXComponent(frameResult);
- } else {
- this.scanFlag = false;
- }
- }
- }
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
然后使用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