複数の画像を開いて表示する必要があります。残念ながら、それらのほとんどは未加工の画像です。
論文を開くと、それぞれ約 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;
}
}
}
}