UWP:如何降低所选图像的质量?

特里·贝内特

我有允许用户使用文件选择器选择图像的代码,并将图像转换为字节数组,以便可以对其进行序列化。在查看图像集合时,如果我的图像太多,则该应用程序将崩溃并无法加载。当我使用Visual Studio进行调试时,它可以正常运行,但需要很长时间才能加载图像。我相信它会超时,因为它需要很长时间才能加载。获取存储文件后。如何降低BitmapImage的质量,以便在序列化时不需要花费很长时间加载?

 private async void AddPic_OnClick(object sender, RoutedEventArgs e)
    {
        ImagePath = string.Empty;
        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.ViewMode = PickerViewMode.Thumbnail;
        openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

        openPicker.FileTypeFilter.Clear();
        openPicker.FileTypeFilter.Add(".bmp");
        openPicker.FileTypeFilter.Add(".jpg");
        openPicker.FileTypeFilter.Add(".jpeg");
        openPicker.FileTypeFilter.Add(".png");

        // Launch file open picker and caller app is suspended and may be terminated
        var file = await openPicker.PickSingleFileAsync();

        if (file != null)
        {
            var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
            var image = new BitmapImage();
            image.SetSource(stream);
            xamlimg.Source = image;
            _myClass.ImageBytes = await App.DataModel.GetBytesAsync(file);

        }
    }

其他班级详细信息:

public BitmapImage Image
    {
        get
        {
            if (ImageBytes == null)
                return null;
            if (_Image == null)
                _Image = new BitmapImage();
            using (var stream = new InMemoryRandomAccessStream())
            {
                stream.WriteAsync(ImageBytes.AsBuffer()).Completed = (i, j) =>
                {
                    stream.Seek(0);
                    _Image.SetSource(stream);
                };
            }
            return _Image;
        }
    }

    [JsonProperty]
    public byte[] ImageBytes { get; set; }

public async Task<byte[]> GetBytesAsync(StorageFile file)
    {
        byte[] fileBytes = null;
        if (file == null) return null;
        using (var stream = await file.OpenReadAsync())
        {
            fileBytes = new byte[stream.Size];
            using (var reader = new DataReader(stream))
            {
                await reader.LoadAsync((uint) stream.Size);
                reader.ReadBytes(fileBytes);
            }
        }
        return fileBytes;
    }
伊戈尔·拉里奇(Igor Ralic)

您可以对其进行解码并将其缩放为更小。因此,一旦获得了文件选择器的结果,就可以执行以下操作:

using (IRandomAccessStream fileStream = await result.OpenAsync(FileAccessMode.Read))
{
    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
    using (var encoderStream = new InMemoryRandomAccessStream())
    {
        BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(encoderStream, decoder);
        var newHeight = decoder.PixelHeight / 2;
        var newWidth = decoder.PixelWidth / 2;
        encoder.BitmapTransform.ScaledHeight = newHeight;
        encoder.BitmapTransform.ScaledWidth = newWidth;

        await encoder.FlushAsync();

        byte[] pixels = new byte[newWidth * newHeight * 4];

        await encoderStream.ReadAsync(pixels.AsBuffer(), (uint)pixels.Length, InputStreamOptions.None);
}

字节数组像素然后应较小以进行序列化,但图像质量较差。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MATLAB 降低图像质量

来自分类Dev

降低delphi中的图像质量

来自分类Dev

ffmpeg降低图像质量,而不是大小

来自分类Dev

如何在不降低python图像质量的情况下删除水平和垂直线

来自分类Dev

如何解决内存不足(OOM)错误而不降低Android中的图像质量

来自分类Dev

如何在不裁剪或降低质量的情况下调整图像大小?

来自分类Dev

干预图像会降低调整大小后的图像质量

来自分类Dev

干预图像会降低调整大小后的图像质量

来自分类Dev

在xaml中调整图像大小而不会降低质量

来自分类Dev

将位图存储在SD卡中会降低图像质量

来自分类Dev

降低质量后从函数返回位图图像

来自分类Dev

Android中的缩放动画会降低图像质量

来自分类Dev

PdfSharp降低了我的jpg输入图像的质量

来自分类Dev

PdfSharp降低了我的jpg输入图像的质量

来自分类Dev

PdfSharp降低了我的jpg输入图像的质量

来自分类Dev

将位图存储在SD卡中会降低图像质量

来自分类Dev

在不降低质量的情况下显示图像

来自分类Dev

KineticJS:如何编辑比屏幕/舞台尺寸大得多的图像而又不降低质量?

来自分类Dev

如何提高图像显示质量?

来自分类Dev

如何降低使用硒拍摄的屏幕截图的质量或尺寸?

来自分类Dev

使用Drupal ImageCache调整预告片图像的大小会降低图像质量

来自分类Dev

如何更改所选图像的颜色?

来自分类常见问题

裁剪图像并将其合并回去而不会降低质量

来自分类Dev

每次用户访问页面时是否会降低jpg图像质量?

来自分类Dev

更改(降低)ogg 文件的质量?

来自分类Dev

我如何稍微降低文字中的图像?

来自分类Dev

如何提高BlendEffect的质量?Lumia Imaging 3.0和UWP

来自分类常见问题

如何用按钮显示所选图像

来自分类Dev

如何用按钮显示所选图像

Related 相关文章

  1. 1

    MATLAB 降低图像质量

  2. 2

    降低delphi中的图像质量

  3. 3

    ffmpeg降低图像质量,而不是大小

  4. 4

    如何在不降低python图像质量的情况下删除水平和垂直线

  5. 5

    如何解决内存不足(OOM)错误而不降低Android中的图像质量

  6. 6

    如何在不裁剪或降低质量的情况下调整图像大小?

  7. 7

    干预图像会降低调整大小后的图像质量

  8. 8

    干预图像会降低调整大小后的图像质量

  9. 9

    在xaml中调整图像大小而不会降低质量

  10. 10

    将位图存储在SD卡中会降低图像质量

  11. 11

    降低质量后从函数返回位图图像

  12. 12

    Android中的缩放动画会降低图像质量

  13. 13

    PdfSharp降低了我的jpg输入图像的质量

  14. 14

    PdfSharp降低了我的jpg输入图像的质量

  15. 15

    PdfSharp降低了我的jpg输入图像的质量

  16. 16

    将位图存储在SD卡中会降低图像质量

  17. 17

    在不降低质量的情况下显示图像

  18. 18

    KineticJS:如何编辑比屏幕/舞台尺寸大得多的图像而又不降低质量?

  19. 19

    如何提高图像显示质量?

  20. 20

    如何降低使用硒拍摄的屏幕截图的质量或尺寸?

  21. 21

    使用Drupal ImageCache调整预告片图像的大小会降低图像质量

  22. 22

    如何更改所选图像的颜色?

  23. 23

    裁剪图像并将其合并回去而不会降低质量

  24. 24

    每次用户访问页面时是否会降低jpg图像质量?

  25. 25

    更改(降低)ogg 文件的质量?

  26. 26

    我如何稍微降低文字中的图像?

  27. 27

    如何提高BlendEffect的质量?Lumia Imaging 3.0和UWP

  28. 28

    如何用按钮显示所选图像

  29. 29

    如何用按钮显示所选图像

热门标签

归档