我需要打开几个图像并显示它们。不幸的是,它们中的大多数都是原始图像。
当我打开这些论文时,它们每个都需要大约 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;
}
}
}
}