.NET MAUI - 相机.MAUI

问题描述 投票:0回答:1

我是移动开发新手,最近观看了有关使用 Camera.MAUI 拍照的教程视频 - https://www.youtube.com/watch?v=nlZSLPf22vI 。我有一个项目需要捕获照片然后将其保存到 mssql 数据库,我已经有一个使用字节数据类型保存图像详细信息的 API,并且我可以将其连接到我的 maui 应用程序。

我的问题是,我不知道如何保存拍摄的照片。

下面是我的初始代码:

<VerticalStackLayout
 Spacing="25"
Padding="30,0"
VerticalOptions="Fill"
HorizontalOptions="Fill">

   <cv:CameraView x:Name="cameraView" WidthRequest="300" HeightRequest="300" Cameras ="{Binding ViewCameraCommand}"/>

    <Button Text="Smile!" Command="{Binding CapturePhotoCommand}"/>

    <Image Source="{Binding ImgSrc}" WidthRequest="200" HeightRequest="200" />

    <Button Margin="20" Text="Save Photo" Command="{Binding SavePhotoCommand}"/>

</VerticalStackLayout>
  [ObservableProperty] public int _imgId;
 [ObservableProperty] public string _imgName;
 [ObservableProperty] public string _imgData;
 [ObservableProperty] public string _loc;
 [ObservableProperty] public string _owner;
 [ObservableProperty] public byte[] _imgView;
 [ObservableProperty] public string _imgType;

 [ObservableProperty] public CameraView _cameraView;
 [ObservableProperty] ImageSource _imgSrc;

 IPhotoDataService photoDataService;
 public HomeViewModel(IPhotoDataService photoDataService)
 {
     this.photoDataService = photoDataService;
 }

 [RelayCommand]
 async Task Tap()
 {
     //TODO: refresh page without details
     await Shell.Current.GoToAsync("//LoginPage");

 }

 [RelayCommand]
 async Task SavePhoto()
 {
     try
     {
         var addPhoto = new PhotoModel
         {
             ImageId = ImgId,
             ImageName = ImgName,
             ImageData = ImgData,
             Location = Loc,
             User = Owner,
             ImageType = ImgType,
             //ImageView = ImgView,
         };

         Debug.WriteLine("---> Add New Item");
         await photoDataService.AddPhotoAsync(addPhoto);
         await Shell.Current.DisplayAlert("Information", "Successfully addded", "Ok");
     }
     catch (Exception ex)
     {
         await Shell.Current.DisplayAlert("Error", ex.Message, "Ok");
     }
 }

 [RelayCommand]
 async Task ViewCamera()
 {
     CameraView.Camera = CameraView.Cameras.First();

     MainThread.BeginInvokeOnMainThread(async () =>
     {
         await CameraView.StopCameraAsync();
         await CameraView.StartCameraAsync();

     });
 }

 [RelayCommand]
 async Task CapturePhoto()
 {
     ImgSrc = CameraView.GetSnapShot(Camera.MAUI.ImageFormat.PNG);
 }
c# maui
1个回答
0
投票

我的问题是,我不知道如何保存拍摄的照片。

建议您使用照片和视频媒体选择器来实现此功能。 IMediaPicker 界面允许用户在设备上选择或拍摄照片或视频。

我们可以调用 CapturePhotoAsync 方法来打开相机并让用户拍照。如果用户拍照,该方法的返回值将是一个非空值。

以下代码示例使用媒体选择器拍摄照片并将其保存到缓存目录:

public async void TakePhoto()
{
    if (MediaPicker.Default.IsCaptureSupported)
    {
        FileResult photo = await MediaPicker.Default.CapturePhotoAsync();

        if (photo != null)
        {
            // save the file into local storage
            string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);

            using Stream sourceStream = await photo.OpenReadAsync();
            using FileStream localFileStream = File.OpenWrite(localFilePath);

            await sourceStream.CopyToAsync(localFileStream);
        }
    }
}

从上述文档中提到的提示,我们可以知道:

FullPath
属性并不总是返回物理路径 文件。要获取文件,请使用
OpenReadAsync
方法。

© www.soinside.com 2019 - 2024. All rights reserved.