如何在Windows Store应用程序中编辑和保存照片?

4

我正在开发一款编辑照片并将其保存在其他位置的应用程序。因此,我找到了一个问题,展示了如何在Windows Store应用程序中调整照片大小。然后,我在我的程序中实现了它:

private async void ResizeButton_Click(object sender, RoutedEventArgs e)
{
    uint width, height;
    if (uint.TryParse(WidthTextBox.Text, out width) && uint.TryParse(HeightTextBox.Text, out height) 
        && _folderWithPhoto != null && _targetFolder != null)
        //_folderWithPhoto and _targetFolder are StorageFolder values get from FolderPicker
    {
        var files = await _folderWithPhoto.GetFilesAsync();
        foreach (StorageFile item in files)
        {
            if (item.ContentType.Contains("image"))
            {
                StorageFile targetFile = await item.CopyAsync(_targetFolder, item.Name, NameCollisionOption.GenerateUniqueName);

                var fileStream = await targetFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);

                InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
                BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder);

                enc.BitmapTransform.ScaledHeight = height;
                enc.BitmapTransform.ScaledWidth = width;

                await enc.FlushAsync();
            }
        }
    }
}

问题

这段代码的结果是相同的照片保存在_targetFolder目录中。所以我不知道如何修复它。

任何帮助将不胜感激。


1
Windows.Storage.FileAccessMode.Read,你不能改成ReadWrite吗?看起来你正在尝试保存一个与原始文件完全相同的新文件。我猜测一下,试试这个:await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite); - MethodMan
@DJKRAZE 谢谢,我没有注意到,但这并没有帮助。 - Mateusz Rogulski
这是我的代码的主要部分。我剪掉的其余部分并不重要。另外,您能否建议我在这种情况下应该如何使用“DataWriter”? - Mateusz Rogulski
有没有一种方法可以对该代码进行调试,并在第一个await enc.FlushAsync();之后,在循环遍历时检查文件是否实际更改..这些图像的高度和宽度都相同..您可以使用快速监视器在调试器中更改一个文件的高度和宽度吗..将其设置为150 x 350这样的奇怪大小,看看结果是否发生了变化.. - MethodMan
这段代码中还有一个 item.CopyAsync,那么是否有 item.CopyToAsync 呢? - MethodMan
显示剩余10条评论
1个回答

1

我不确定Mateusz在你的foreach循环中会做类似这样的事情

ras.Seek(0);
fileStream.Seek(0);
fileStream.Size = 0;
await RandomAccessStream.CopyAsync(ras, fileStream);

fileStream.Dispose();
ras.Dispose();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接