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
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 |
---|---|
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
-
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 } ]
-
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%')
-
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 }
-
Đ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 } })
-
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); } }
-
Số hiệu chú thích phi thường kỹ càng tỉ mỉ