HarmonyOS 自定义相机拍照后数据展示

用自定义相机拍照后,得到了component: image.Component。component里面有byteBuffer,我怎么做才可以将这个buffer显示再image或者ImageKnifeComponent上面?

imageObj.getComponent(image.ComponentType.JPEG, (errCode: BusinessError, component: image.Component): void => {})
HarmonyOS
2024-08-12 15:32:07
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

在回调中将buffer数据转换成pixelMap,然后image组件直接加载pixelMap即可;

关于回调函数中对buffer数据处理的可参照以下代码:

/函数中设置监听photoAvailable,在回调中生成图片 
setPhotoOutputCb(photoOutput: camera.PhotoOutput) { 
  //设置回调之后,调用photoOutput的capture方法,就会将拍照的buffer回传到回调中 
  photoOutput.on('photoAvailable', (errCode: BusinessError, photo: camera.Photo): void => { 
    console.info(`CameraDemo getPhoto start. err: ${JSON.stringify(errCode)}`); 
    if (errCode || photo === undefined || photo.main === undefined) { 
      console.error('CameraDemo getPhoto failed'); 
      return; 
    } 
    let imageObj = photo.main; 
    imageObj.getComponent(image.ComponentType.JPEG, async (errCode: BusinessError, component: image.Component): Promise<void> => { 
      console.info('CameraDemo getComponent start'); 
      if (errCode || component === undefined) { 
        console.error('CameraDemo getComponent failed'); 
        return; 
      } 
      let buffer: ArrayBuffer; 
      if (component.byteBuffer) { 
        buffer = component.byteBuffer; 
        this.buffer = buffer; 
        let sourceOptions: image.SourceOptions = { 
          sourceDensity: 0, // 在不确定当前密度时传0 
          sourcePixelFormat: image.PixelMapFormat.RGBA_8888, 
          sourceSize: this.imageSize 
        } 
        let imageSource: image.ImageSource = image.createImageSource(buffer, sourceOptions); 
        let opts: image.InitializationOptions = { 
          editable: false, 
          pixelFormat: image.PixelMapFormat.RGBA_8888, 
          size: this.imageSize 
        } 
        let pixelMap = await imageSource.createPixelMap(opts); 
        this.finalPixelMap = pixelMap; 
      } else { 
        console.error('CameraDemo byteBuffer is null'); 
        return; 
      } 
    }); 
  }); 
}

image组件直接加载pixelMap可参照以下代码:

Image(this.finalPixelMap) 
  .objectFit(ImageFit.Fill) 
  .width('100%') 
  .height(300)
分享
微博
QQ
微信
回复
2024-08-12 19:43:13
相关问题
【求助】自定义相机Camera2焦距异常
7702浏览 • 1回复 待解决
HarmonyOS 相机拍照模糊
144浏览 • 0回复 待解决
HarmonyOS 拉起相机拍照
123浏览 待解决
自定义弹窗自定义转场动画
654浏览 • 1回复 待解决
HarmonyOS 如何自定义BuildMode?
105浏览 • 1回复 待解决
HarmonyOS 自定义弹窗CustomDialog问题
166浏览 • 1回复 待解决
HarmonyOS 自定义弹窗的问题
225浏览 • 1回复 待解决
HarmonyOS 如何设置自定义字体
299浏览 • 1回复 待解决
js相机组件拍照自动保存吗
3840浏览 • 1回复 待解决
HarmonyOS 自定义Dialog显示问题
91浏览 • 1回复 待解决
HarmonyOS ArkUI加载自定义组件
138浏览 • 1回复 待解决
HarmonyOS APP无法打开相机拍照
117浏览 • 1回复 待解决
HarmonyOS ArkWeb是否支持自定义UserAgent
101浏览 • 1回复 待解决
HarmonyOS TextInput自定义键盘问题
156浏览 • 1回复 待解决
HarmonyOS Timer倒计时自定义
109浏览 • 1回复 待解决
HarmonyOS 自定义弹窗遮罩未全屏
129浏览 • 1回复 待解决