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
微信
回复1
2024-08-12 19:43:13
相关问题
HarmonyOS 自定义相机demo
136浏览 • 1回复 待解决
HarmonyOS 自定义相机演示demo
105浏览 • 1回复 待解决
能够提供HarmonyOS自定义相机案例吗?
258浏览 • 1回复 待解决
HarmonyOS 自定义弹窗封装不显示
211浏览 • 1回复 待解决
【求助】自定义相机Camera2焦距异常
7863浏览 • 1回复 待解决
HarmonyOS 拉起相机拍照
277浏览 待解决
HarmonyOS 相机拍照模糊
400浏览 • 0回复 待解决
js相机组件拍照自动保存吗
4089浏览 • 1回复 待解决
自定义弹窗自定义转场动画
917浏览 • 1回复 待解决
HarmonyOS 自定义键盘
165浏览 • 1回复 待解决
HarmonyOS 相机-拍照之后预览
146浏览 • 1回复 待解决
HarmonyOS 自定义弹窗选择
267浏览 • 1回复 待解决
HarmonyOS 使用自定义字体
134浏览 • 1回复 待解决
HarmonyOS上如何控制相机拍照
56浏览 • 0回复 待解决