升级blit的质量(Winrt c#)

升级blit的质量(Winrt c#),c#,windows-runtime,blit,writeablebitmapex,C#,Windows Runtime,Blit,Writeablebitmapex,实际上,我试着制作一幅独特的画布图像,上面有很多东西 我创建了一个图像与我需要的一切,但图像的质量真的很差。你知道我如何升级它吗 这是我保存图像时代码的结尾: StorageFile filesave = await ApplicationData.Current.LocalFolder.CreateFileAsync("filesave.jpg", CreationCollisionOption.ReplaceExisting); Guid encoderId = Windo

实际上,我试着制作一幅独特的画布图像,上面有很多东西

我创建了一个图像与我需要的一切,但图像的质量真的很差。你知道我如何升级它吗

这是我保存图像时代码的结尾:

    StorageFile filesave = await ApplicationData.Current.LocalFolder.CreateFileAsync("filesave.jpg", CreationCollisionOption.ReplaceExisting);

    Guid encoderId = Windows.Graphics.Imaging.BitmapEncoder.JpegEncoderId;
    await WinRTXamlToolkit.Imaging.WriteableBitmapSaveExtensions.SaveToFile(backgroundBmp, filesave, encoderId);

如果有人有主意的话?谢谢您的时间,问候。

这是SaveToFile方法的来源:

    /// <summary>
    /// Saves the WriteableBitmap to the given file with the specified BitmapEncoder ID.
    /// </summary>
    /// <param name="writeableBitmap">The writeable bitmap.</param>
    /// <param name="outputFile">The output file.</param>
    /// <param name="encoderId">The encoder id.</param>
    /// <returns></returns>
    public static async Task SaveToFile(
        this WriteableBitmap writeableBitmap,
        StorageFile outputFile,
        Guid encoderId)
    {
        Stream stream = writeableBitmap.PixelBuffer.AsStream();
        byte[] pixels = new byte[(uint)stream.Length];
        await stream.ReadAsync(pixels, 0, pixels.Length);

        using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            var encoder = await BitmapEncoder.CreateAsync(encoderId, writeStream);
            encoder.SetPixelData(
                BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Premultiplied,
                (uint)writeableBitmap.PixelWidth,
                (uint)writeableBitmap.PixelHeight,
                96,
                96,
                pixels);
            await encoder.FlushAsync();

            using (var outputStream = writeStream.GetOutputStreamAt(0))
            {
                await outputStream.FlushAsync();
            }
        }
    }
然后,您可以将SaveToJpg写为:

    /// <summary>
    /// Saves the WriteableBitmap to the given JPG file with the specified image quality.
    /// </summary>
    /// <param name="writeableBitmap">The writeable bitmap.</param>
    /// <param name="outputFile">The output file.</param>
    /// <param name="imageQuality">Valid values from 0 to 1.0. Higher values indicate higher quality.</param>
    /// <returns></returns>
    public static async Task SaveToJpg(
        WriteableBitmap writeableBitmap,
        StorageFile outputFile,
        double imageQuality = 1.0 // Maximum quality
    )
    {
        Stream stream = writeableBitmap.PixelBuffer.AsStream();
        byte[] pixels = new byte[(uint)stream.Length];
        await stream.ReadAsync(pixels, 0, pixels.Length);

        using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet();
            var qualityValue = new Windows.Graphics.Imaging.BitmapTypedValue(
                imageQuality,
                Windows.Foundation.PropertyType.Single
                );
            propertySet.Add("ImageQuality", qualityValue);
            var encoder = await BitmapEncoder.CreateAsync(
                BitmapEncoder.JpegEncoderId,
                writeStream
                propertySet);
            encoder.SetPixelData(
                BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Premultiplied,
                (uint)writeableBitmap.PixelWidth,
                (uint)writeableBitmap.PixelHeight,
                96,
                96,
                pixels);
            await encoder.FlushAsync();

            using (var outputStream = writeStream.GetOutputStreamAt(0))
            {
                await outputStream.FlushAsync();
            }
        }
    }
//
///将WriteableBitmap保存到具有指定图像质量的给定JPG文件。
/// 
///可写位图。
///输出文件。
///从0到1.0的有效值。值越高表示质量越高。
/// 
公共静态异步任务SaveToJpg(
WriteableBitmap WriteableBitmap,
StorageFile输出文件,
双图像质量=1.0//最大质量
)
{
Stream=writeableBitmap.PixelBuffer.AsStream();
字节[]像素=新字节[(uint)stream.Length];
wait stream.ReadAsync(像素,0,像素,长度);
使用(var writeStream=await outputFile.OpenAsync(FileAccessMode.ReadWrite))
{
var propertySet=新的Windows.Graphics.Imaging.BitmapPropertySet();
var qualityValue=new Windows.Graphics.Imaging.BitmapTypedValue(
图像质量,
窗体
);
添加(“图像质量”,qualityValue);
var编码器=等待BitmapEncoder.CreateAsync(
BitmapEncoder.JpegEncoderId,
writeStream
房地产;
编码器.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.预乘,
(uint)writeableBitmap.PixelWidth,
(uint)writeableBitmap.PixelHeight,
96,
96,
像素);
等待编码器。FlushAsync();
使用(var outputStream=writeStream.getOutputstreeamat(0))
{
等待outputStream.FlushAsync();
}
}
}

您可以编辑扩展方法以获得更好的图像质量。您所说的“编辑扩展方法”是什么意思?请下载WinRT Xaml Toolkit的源代码并编辑
SaveToFile
扩展方法。这是错误的项目。您发布的代码来自WiRTXAMLoToCKIT,因此请考虑更改标签和标题。我在这里已经回答了:
    /// <summary>
    /// Saves the WriteableBitmap to the given JPG file with the specified image quality.
    /// </summary>
    /// <param name="writeableBitmap">The writeable bitmap.</param>
    /// <param name="outputFile">The output file.</param>
    /// <param name="imageQuality">Valid values from 0 to 1.0. Higher values indicate higher quality.</param>
    /// <returns></returns>
    public static async Task SaveToJpg(
        WriteableBitmap writeableBitmap,
        StorageFile outputFile,
        double imageQuality = 1.0 // Maximum quality
    )
    {
        Stream stream = writeableBitmap.PixelBuffer.AsStream();
        byte[] pixels = new byte[(uint)stream.Length];
        await stream.ReadAsync(pixels, 0, pixels.Length);

        using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            var propertySet = new Windows.Graphics.Imaging.BitmapPropertySet();
            var qualityValue = new Windows.Graphics.Imaging.BitmapTypedValue(
                imageQuality,
                Windows.Foundation.PropertyType.Single
                );
            propertySet.Add("ImageQuality", qualityValue);
            var encoder = await BitmapEncoder.CreateAsync(
                BitmapEncoder.JpegEncoderId,
                writeStream
                propertySet);
            encoder.SetPixelData(
                BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Premultiplied,
                (uint)writeableBitmap.PixelWidth,
                (uint)writeableBitmap.PixelHeight,
                96,
                96,
                pixels);
            await encoder.FlushAsync();

            using (var outputStream = writeStream.GetOutputStreamAt(0))
            {
                await outputStream.FlushAsync();
            }
        }
    }