import { camera, cameraPicker as picker } from '@kit.CameraKit';
import { fileIo, fileUri } from '@kit.CoreFileKit';
import { image } from '@kit.ImageKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  @State imgSrc: string = '';
  @State videoSrc: string = '';

  getRelativePath(fileUrl: string): string {
    // 移除file://前缀
    const withoutPrefix = fileUrl.replace('file://', '');
    // 查找/data/开头的路径部分
    const dataIndex = withoutPrefix.indexOf('/data/');
    if (dataIndex !== -1) {
      return withoutPrefix.substring(dataIndex);
    }
    return withoutPrefix;
  }

  async loadPixelMap(uri: string) {
    let pixelMap: image.PixelMap
    // const imageSource = image.createImageSource("/data/storage/el2/base/haps/entry/cache/1753932557047.jpg");
    const imageSource = image.createImageSource(this.getRelativePath(uri));
    pixelMap = await imageSource.createPixelMap();
    console.log('vasjdsajkdsa' + JSON.stringify(pixelMap))
    pixelMap.getImageInfo().then((imageInfo: image.ImageInfo) => {
      if (imageInfo != undefined) {
        console.info("Succeeded1111 in obtaining the image pixel map information." + JSON.stringify(imageInfo));
      }
    }).catch((error: BusinessError) => {
      console.error(`Failed1111 to obtain the image pixel map information. code is ${error.code}, message is ${error.message}`);
    })
  }

  createPickerProfile(context: Context): picker.PickerProfile {
    let pathDir = context.filesDir;
    let fileName = `${new Date().getTime()}`;
    let filePath = pathDir + `/${fileName}.jpg`;
    fileIo.createRandomAccessFileSync(filePath, fileIo.OpenMode.CREATE);

    let uri = fileUri.getUriFromPath(filePath);
    let pickerProfile: picker.PickerProfile = {
      cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK,
      saveUri: uri
    };
    return pickerProfile;
  }

  async getPickerResult(context: Context, pickerProfile: picker.PickerProfile): Promise<picker.PickerResult> {
    let result: picker.PickerResult =
      await picker.pick(context, [picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO],
        pickerProfile);
    console.info(`picker resultCode: ${result.resultCode},resultUri: ${result.resultUri},mediaType: ${result.mediaType}`);
    return result;
  }

  getContext(): Context | undefined {
    let uiContext: UIContext = this.getUIContext();
    let context: Context | undefined = uiContext.getHostContext();
    return context;
  }

  build() {
    RelativeContainer() {
      Column() {
        Image(this.imgSrc).width(200).height(200).backgroundColor(Color.Black).margin(5);
        Video({ src: this.videoSrc }).width(200).height(200).autoPlay(true);
        Button("Test Picker Photo&Video").fontSize(20)
          .fontWeight(FontWeight.Bold)
          .onClick(async () => {
            let context = this.getContext();
            if (context === undefined) {
              return;
            }
            let pickerProfile = this.createPickerProfile(context);
            let result = await this.getPickerResult(context, pickerProfile);
            console.log('vasjklasjlkdsa' + JSON.stringify(result))
            // console.log('ahsldjaskldas' + JSON.stringify(result))
            // this.loadPixelMap(result.resultUri)
            // if (result.resultCode == 0) {
            //   if (result.mediaType === picker.PickerMediaType.PHOTO) {
            //     this.imgSrc = result.resultUri;
            //   } else {
            //     this.videoSrc = result.resultUri;
            //   }
            // }
          }).margin(5);

      }.alignRules({
        center: { anchor: '__container__', align: VerticalAlign.Center },
        middle: { anchor: '__container__', align: HorizontalAlign.Center }
      });
    }
    .height('100%')
    .width('100%')
  }
}

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐