Như thế nào thuyên chuyển thiết bị cameras tiến hành chụp ảnh, xem trước cũng đem quay chụp kết quả bảo tồn ở truyền thông kho trung ( camera ) Nguyên sangTinh hoa

Hoang dại khuẩn quân
Tuyên bố với 2023-12-14 10:25
Xem
2 cất chứa

Cảnh tượng thuyết minh

Thuyên chuyển thiết bị cameras tiến hành chụp ảnh, xem trước là rất nhiều ứng dụng khai phá trong quá trình đều yêu cầu công năng. Ở chụp ảnh hoàn thành khi biểu hiện ảnh chụp xem trước đồ có thể xác nhận quay chụp ảnh chụp hay không đạt tới mong muốn, bổn lệ đem vì đại gia giới thiệu như thế nào thực hiện kể trên công năng.

Hiệu quả hiện ra

Bổn lệ hiệu quả như sau:

Chụp ảnh Xem trước
如何调用设备摄像头进行拍照、预览并将拍摄结果保存在媒体库中(camera)-鸿蒙开发者社区 如何调用设备摄像头进行拍照、预览并将拍摄结果保存在媒体库中(camera)-鸿蒙开发者社区

Vận hành hoàn cảnh

Bổn lệ căn cứ vào dưới hoàn cảnh khai phá, khai phá giả cũng có thể căn cứ vào mặt khác thích xứng phiên bản tiến hành khai phá.

  • IDE: DevEco Studio 4.0.0.201 Beta1
  • SDK: Ohos_sdk_public 4.0.7.5 (API Version 10 Beta1)

Thực hiện ý nghĩ

Bổn lệ sử dụng @ohos.multimedia.camera tiếp lời thực hiện camera thí dụ mẫu chủ yếu công năng: Chụp ảnh, xem trước;

  • Chụp ảnh: XComponent lắp ráp phụ trách vẽ cameras hình ảnh hiện ra cửa sổ, này onload sự kiện thuyên chuyển cameraModel.ts initCamera phương pháp khởi động lại camera công năng phát ra hình ảnh tin tức. Chụp ảnh động tác sử dụng Image lắp ráp thực hiện, này onclick sự kiện thuyên chuyển cameraModel.ts takepicture phương pháp bắt đầu chụp ảnh.

  • Xem trước: Phản hồi camera giao diện điểm đánh cái đáy bên trái xem trước đồ có thể vào album ứng dụng, có thể ở trong đó xem xét ảnh chụp cùng thu video.

Khai phá bước đi

  1. Xin sở cần quyền hạn

    Ở model.json5 trung tăng thêm dưới phối trí:

    "requestPermissions": [
    {
    "name": "ohos.permission.CAMERA" // cho phép ứng dụng sử dụng camera quay chụp ảnh chụp cùng thu video
    },
    {
    "name": "ohos.permission.MICROPHONE" // cho phép ứng dụng sử dụng microphone
    },
    {
    "name": "ohos.permission.MEDIA_LOCATION" // cho phép ứng dụng phỏng vấn người dùng truyền thông văn kiện trung địa lý vị trí tin tức
    },
    {
    "name": "ohos.permission.WRITE_MEDIA" // cho phép ứng dụng đọc viết người dùng phần ngoài tồn trữ trung truyền thông văn kiện tin tức
    },
    {
    "name": "ohos.permission.READ_MEDIA" // cho phép ứng dụng đọc lấy người dùng phần ngoài tồn trữ trung truyền thông văn kiện tin tức
    }
    ]
    
  2. Sáng tạo vẽ lắp ráp XComponent lấy phát ra cameras thu hoạch hình ảnh, này trói định onload phương pháp trung giả thiết tranh vẽ lớn nhỏ.

    build() {
    Column() {
    Title()
    .visibility(this.isTitleShow? Visibility.Visible: Visibility.None)
    Stack({ alignContent: Alignment.Bottom }) {
    Stack({ alignContent: Alignment.TopStart }) {
    XComponent({
    id: 'componentId',
    type: 'surface',
    controller: this.mXComponentController // đem khống chế khí trói định đến XComponent lắp ráp
    })
    .onLoad(() => {
    this.mXComponentController.setXComponentSurfaceSize({ surfaceWidth: 640, surfaceHeight: 480 });// thiết trí surface lớn nhỏ
    this.surfaceId = this.mXComponentController.getXComponentSurfaceId();
    this.currentModel = CameraMode.modePhoto;
    this.cameraModel.initCamera(this.surfaceId); // thuyên chuyển model/cameraModel.ts khởi động lại camera công năng
    })
    .width('100%')
    .height('100%')
    .margin({ bottom: 152 })
    Column() {
    }
    .width('97%')
    .height('100%')
    
  3. Khởi động lại camera công năng

    initCamera phương pháp thông qua sáng tạo camera quản lý khí ví dụ thực tế cameraMgr tới sáng tạo hình ảnh phát ra đối tượng previewOutput. cameraMgr lại thông qua sáng tạo CaptureSession ví dụ thực tế tới phối trí hội thoại, hoàn thành camera công năng chuẩn bị công tác.

    import image from '@ohos.multimedia.image';// tự @ohos.multimedia.image dẫn vào image, cung cấp hình ảnh xử lý hiệu quả
    ...
    private receiver: image.ImageReceiver = undefined;// hình ảnh tiếp thu loại, dùng cho thu hoạch lắp ráp surface id, tiếp thu mới nhất hình ảnh cùng đọc gỡ xuống một tấm hình
    ...
    constructor() {
    this.mediaModel = MediaModel.getMediaInstance();// thông qua thuyên chuyển model/MediaModel.ets trung phương pháp sáng tạo mediaInstance loại mediaModel
    // sáng tạo ImageReceiver ví dụ thực tế receiver
    this.receiver = image.createImageReceiver(
    cameraWH.width,
    cameraWH.height,
    FOUR,
    EIGHT
    );
    // tiếp thu hình ảnh khi đăng ký hồi điều
    this.receiver.on('imageArrival', () => {
    // từ ImageReceiver đọc gỡ xuống một tấm hình
    this.receiver.readNextImage((err, image) => {
    if (err || image === undefined) {
    return;
    }
    // căn cứ hình ảnh lắp ráp loại hình từ hình ảnh trung thu hoạch lắp ráp hoãn tồn
    image.getComponent(FOUR, (errMsg, img) => {
    if (errMsg || img === undefined) {
    return;
    }
    let buffer = new ArrayBuffer(FOUR_THOUSAND_AND_SIXTY_NINE);
    if (img.byteBuffer) {
    buffer = img.byteBuffer;
    }
    this.saveImage(buffer, image);
    });
    });
    });
    }
    
    
    async initCamera(surfaceId: string): Promise<void> {
    ...
    try {
    this.cameraMgr = camera.getCameraManager(globalThis.cameraContext);// thu hoạch camera quản lý khí ví dụ thực tế
    }
    this.camerasArray = this.cameraMgr.getSupportedCameras();// thu hoạch duy trì chỉ định camera thiết bị đối tượng
    if (this.camerasArray.length === 0) {
    return;
    }
    let mCamera = this.camerasArray[0];
    this.cameraInput = this.cameraMgr.createCameraInput(mCamera);
    this.cameraInput.open();
    this.capability = this.cameraMgr.getSupportedOutputCapability(mCamera);// tuần tra camera thiết bị duy trì phát ra năng lực
    let previewProfile = this.capability.previewProfiles[0];
    // thông qua camera quản lý khí sáng tạo xem trước phát ra đối tượng
    this.previewOutput = this.cameraMgr.createPreviewOutput(
    previewProfile,
    surfaceId //surfaceId từ XComponent lắp ráp thu hoạch
    );
    let rSurfaceId = await this.receiver.getReceivingSurfaceId();// thu hoạch một cái surface id cung mặt khác lắp ráp sử dụng
    let photoProfile = this.capability.photoProfiles[0];
    // thông qua camera quản lý khí sáng tạo ảnh chụp phát ra đối tượng
    this.photoOutPut = this.cameraMgr.createPhotoOutput(
    photoProfile,
    rSurfaceId //rSurfaceId thông qua cấu tạo hàm số trung định nghĩa hình ảnh tiếp thu loại receiver thu hoạch
    );
    this.capSession = this.cameraMgr.createCaptureSession();// sáng tạo CaptureSession ví dụ thực tế
    this.capSession.beginConfig();// bắt đầu phối trí hội thoại
    this.capSession.addInput(this.cameraInput);// đem cameraInput gia nhập hội thoại
    this.capSession.addOutput(this.previewOutput);// đem xem trước phát ra gia nhập hội thoại
    this.capSession.addOutput(this.photoOutPut);// đem ảnh chụp phát ra gia nhập hội thoại
    await this.capSession mitConfig();// đệ trình phối trí tin tức
    await this.capSession.start();// bắt đầu phát ra
    }
    
    
  4. Điểm đánh cái nút tiến hành chụp ảnh

    Chụp ảnh cái nút thông qua Image lắp ráp hiện ra, này trói định onClick phương pháp thuyên chuyển takePicture phương pháp bắt đầu chụp ảnh.

    Image(this.getCameraIcon())
    .size({ width: 64, height: 64 })
    .margin({ left: 10 })
    .id('camera')
    .onClick(() => {
    if (this.currentModel === CameraMode.modePhoto) {
    prompt.showToast({ message: ' chụp ảnh trung...', duration: 200 });
    this.cameraModel.takePicture();// thuyên chuyển model/cameraModel.takePicture() bắt đầu chụp ảnh
    }
    })
    
  5. Chụp ảnh công năng cụ thể thực hiện

    • Chụp ảnh

      async takePicture(): Promise<void> {
      // thiết trí chụp ảnh tương quan tham số
      let photoSettings = {
      rotation: this.imageRotation,
      quality: camera.QualityLevel.QUALITY_LEVEL_MEDIUM,
      location: {
      // vị trí tin tức, kinh độ và vĩ độ
      latitude: 12.9698,
      longitude: 77.75,
      altitude: 1000,
      },
      mirror: false,
      };
      await this.photoOutPut.capture(photoSettings);
      AppStorage.Set('isRefresh', true);
      }
      
    • Bảo tồn hình ảnh

      saveImage phương pháp sử dụng MediaModel trung createAndGetUri phương pháp sáng tạo Image loại hình tài nguyên, đem quay chụp đến ảnh chụp viết nhập đến cái này tài nguyên trung đi.

      //model/MediaModel.ts trung định nghĩa phụ trách bảo tồn hình ảnh tương quan phương pháp
      async createAndGetUri(mediaType: mediaLibrary.MediaType): Promise<mediaLibrary.FileAsset> {
      let dateTimeUtil: DateTimeUtil = new DateTimeUtil();
      let info: FileInfo = this.getInfoFromMediaType(mediaType);
      let name: string = `${dateTimeUtil.getDate()}_${dateTimeUtil.getTime()}`;// thu hoạch trước mặt thời gian
      let displayName: string = `${info.prefix}${name}${info.suffix}`;
      // thu hoạch công cộng mục lục đường nhỏ.
      let publicPath: string = await this.mediaLibraryTest.getPublicDirectory(
      info.directory
      );// thông qua trích dẫn tự @ohos.multimedia.mediaLibrary mediaLibraryTest loại sáng tạo truyền thông tài nguyên, trong đó định nghĩa truyền thông loại hình, tên, đường nhỏ.
      let fileAsset: mediaLibrary.FileAsset = await this.mediaLibraryTest.createAsset(
      mediaType,// căn cứ truyền vào hàm số createAndGetUri mediaType tham số quyết định sáng tạo cái gì loại hình truyền thông tài nguyên
      displayName,
      publicPath
      );
      return fileAsset;
      }
      async getFdPath(fileAsset: mediaLibrary.FileAsset): Promise<number> {
      let fd: number = await fileAsset.open('Rw');// mở ra trước mặt văn kiện
      return fd;
      }
      ...
      
      async saveImage(buffer: ArrayBuffer, img: image.Image): Promise<void> {
      this.fileAsset = await this.mediaModel.createAndGetUri(mediaLibrary.MediaType.IMAGE);
      // thông qua thuyên chuyển MediaModel trung phương pháp sáng tạo Image loại hình tài nguyên
      this.photoPath = this.fileAsset.uri;
      this.fd = await this.mediaModel.getFdPath(this.fileAsset);
      await fileIo.write(this.fd, buffer);// đem quay chụp ảnh chụp viết nhập đến Mediamodel truyền quay lại tài nguyên trung đi
      await this.fileAsset.close(this.fd);// phóng thích open hàm số
      await img.release();
      if (this.takePictureHandle) {
      this.takePictureHandle(this.photoPath);
      }
      }
      

Tham khảo

© quyền tác giả về tác giả sở hữu, như cần đăng lại, thỉnh ghi chú rõ xuất xứ, nếu không đem truy cứu pháp luật trách nhiệm
Phân loại
Đã với 2023-12-14 10:29:04 sửa chữa
Tán 3
Cất chứa 2
Hồi phục
Cử báo
1 điều hồi phục
Ấn thời gian chính tự
/
Ấn thời gian đảo ngược
红叶亦知秋
Hồng diệp cũng biết thu

Số hiệu chú thích phi thường kỹ càng tỉ mỉ

Hồi phục
2023-12-14 14:23:41
Hồi phục
    Tương quan đề cử
    Cái này người dùng thực lười, còn không có cá nhân tóm tắt
    Thiệp
    Video
    Danh vọng
    Fans
    Xã khu tinh hoa nội dung

    Mục lục