private static async Task <Photo.Metadata> reloadAndSave(
            Photo photo, bool forceJpeg, string destFile)
        {
            using (var mmap = MemoryMappedFile.OpenExisting(
                       mmapName(photo.FileName),
                       MemoryMappedFileRights.Read)) {
                using (var stream = new UnsafeMemoryMapStream(
                           mmap.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read),
                           FileAccess.Read)) {
                    (var sourceFrame, var format) = loadFrame(stream.Stream);
                    var            md          = sourceFrame.Metadata.Clone() as BitmapMetadata;
                    Photo.Metadata newMetadata = await Exif.SetMetadata(photo, md);

                    newMetadata.Width  = sourceFrame.PixelWidth;
                    newMetadata.Height = sourceFrame.PixelHeight;
                    BitmapEncoder encoder = forceJpeg ?
                                            new JpegBitmapEncoder() :
                                            BitmapEncoder.Create(format);
                    encoder.Frames.Add(
                        BitmapFrame.Create(
                            sourceFrame,
                            null,
                            md,
                            sourceFrame.ColorContexts));
                    if (encoder is JpegBitmapEncoder jpg)
                    {
                        jpg.Rotation = Exif.SaveRotation(md);
                    }
                    sourceFrame = null;
                    using (var outFile = new FileStream(destFile, FileMode.CreateNew)) {
                        encoder.Save(outFile);
                    }
                    return(newMetadata);
                }
            }
        }