c # - Sådan gemmes billede, der er fanget fra Windows-telefonen automatisk efter klikbesparelsesknappen i UWP?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har 3 knapper og 1 billedvisning. Den første knap (Kamera) åbner kameraet og klikker på billedet og indstiller det klikede billede i billedvisningen. 2. knap (Fil) pic billedet fra mappen og jeg vil have min tredje knap (Gem) for at gemme det viste billede i mobilen. På skrivebordet kan jeg nemt bruge filvalgsmulighed til at gemme billedet i respekteret mappe, men jeg vil gerne gemme billedet automatisk efter at have trykket på knappen i mobilgalleriet.

Bedste reference


Baseret på prøven på code.msdn.

I stedet for at vise indholdet af den første lagringsfil og derefter oprette en ny til at gemme filen, kombinerede jeg kun kodeprøverne med et tilfældigt genereret filnavn i billederne mappen (husk at tilføje billeder mappe kapacitet.) [2]


private StorageFile storeFile;
private IRandomAccessStream stream;
private async void SavePhotoClicked(object sender, RoutedEventArgs e)
{
    try
    {
        CameraCaptureUI capture = new CameraCaptureUI();
        capture.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg;
        capture.PhotoSettings.CroppedAspectRatio = new Size(3, 5);
        capture.PhotoSettings.MaxResolution = CameraCaptureUIMaxPhotoResolution.HighestAvailable;
        storeFile = await capture.CaptureFileAsync(CameraCaptureUIMode.Photo);

        if (storeFile != null)
        {
            stream = await storeFile.OpenAsync(FileAccessMode.Read);

            var s = await KnownFolders.PicturesLibrary.CreateFileAsync(DateTime.UtcNow.ToString("yyyyMMddHHmmss") + ".jpg");

            using (var dataReader = new DataReader(stream.GetInputStreamAt(0)))
            {
                await dataReader.LoadAsync((uint)stream.Size);
                byte[] buffer = new byte[(int)stream.Size];
                dataReader.ReadBytes(buffer);

                await FileIO.WriteBytesAsync(s, buffer);
            }
        }
    }
    catch (Exception ex)
    {
        var messageDialog = new MessageDialog(ex.Message, "Unable to save now.");
        await messageDialog.ShowAsync();
    }
}