鸿蒙中拍照暂存到沙箱,并获取照片信息
·
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%')
}
}
更多推荐


所有评论(0)