0

我需要打开几个图像并显示它们。不幸的是,它们中的大多数都是原始图像。

当我打开这些论文时,它们每个都需要大约 400MB 内存。有没有一种简单的方法可以在打开时将它们缩小到 HD 或 UDH 以节省内存。

无法使用 WPF 运行它(显示原始文件),我实际上更喜欢它。如果有 WPF 的解决方案,我真的很高兴。

谷歌没有帮助我。

这是我的快速设置。

   using NewPhotoSort.Data;
   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;
   using System.Threading.Tasks;
   using Windows.Graphics.Imaging;
   using Windows.Storage;
   using Windows.Storage.Pickers;
   using Windows.Storage.Streams;
   using Windows.UI.Xaml.Media.Imaging;
   
   namespace NewPhotoSort.Utils
   {
       public class FileOperations
       {
           public static List<ImageData> imageList = null;
   
           public static async Task getImageList()
           {
               FileOpenPicker fop = new FileOpenPicker();
               fop.FileTypeFilter.Add(".ARW");
               fop.FileTypeFilter.Add(".arw");
               fop.FileTypeFilter.Add(".CR2");
               fop.FileTypeFilter.Add(".cr2");
               fop.FileTypeFilter.Add(".JPG");
               fop.FileTypeFilter.Add(".jpg");
               fop.FileTypeFilter.Add(".JPEG");
               fop.FileTypeFilter.Add(".jpeg");
               fop.FileTypeFilter.Add(".PNG");
               fop.FileTypeFilter.Add(".png");
               fop.FileTypeFilter.Add(".GIF");
               fop.FileTypeFilter.Add(".gif");
               fop.FileTypeFilter.Add(".TIF");
               fop.FileTypeFilter.Add(".tif");
               fop.FileTypeFilter.Add(".TIFF");
               fop.FileTypeFilter.Add(".tiff");
               fop.ViewMode = PickerViewMode.Thumbnail;
   
               var inputFiles = await fop.PickMultipleFilesAsync();
   
               if (inputFiles != null)
               {
                   imageList = new List<ImageData>();
   
                   foreach (var i in inputFiles)
                   {
                       ImageData data = new ImageData();
                       data.state = ImageData.Type.Unsorted;
                       data.file = i;
                       data.img = await getImagefromFile(i);
                       imageList.Add(data);
                   }
               }
           }
   
   
           private static async Task<SoftwareBitmapSource> getImagefromFile(StorageFile file)
           {
   
               SoftwareBitmap softwareBitmap;
   
               using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
               {
                   // Create the decoder from the stream
                   BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
   
                   // Get the SoftwareBitmap representation of the file
                   softwareBitmap = await decoder.GetSoftwareBitmapAsync();
   
                   if (softwareBitmap.BitmapPixelFormat != BitmapPixelFormat.Bgra8 || softwareBitmap.BitmapAlphaMode == BitmapAlphaMode.Straight)
                   {
                       softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
                   }
   
                   var source = new SoftwareBitmapSource();
                   await source.SetBitmapAsync(softwareBitmap);
                   return source;
                   //img.Source = source;
               }
           }
   
       }
   }
   
   
4

0 回答 0