问题描述
我必须进行并行工作(当然是异步任务)来模糊从文件夹中选择的图像,所以我找到了这个(BitmapImage),但问题是我不知道如何访问这个对象的字节或像素,这样我就可以改变它们,模糊或其他东西:
var folderPicker = new Windows.Storage.Pickers.FolderPicker();
folderPicker.FileTypeFilter.Add(".jpg");
folderPicker.FileTypeFilter.Add(".jpeg");
folderPicker.FileTypeFilter.Add(".png");
var folder = await folderPicker.PickSingleFolderAsync();
var filesList = await folder.GetFilesAsync();
for (int i = 0; i < filesList.Count; i++)
{
using (var stream = await filesList[i].OpenAsync(Windows.Storage.FileAccessMode.Read))
{
//Here I will use some array of BitmapImage
var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
await bitmapImage.SetSourceAsync(stream);
//show Image on Form
imageSourceForm.source = bitmapImage;
}
}
那么有什么方法可以获取此对象的像素或字节,或者您是否知道我可以使用的方法,但是使用 async Task.最重要的部分是 UI Thread 必须是响应式的,而图像是模糊的。提前致谢。
解决方法
您可以使用以下代码获取图像的字节数:
var random = await Windows.Storage.Streams.RandomAccessStreamReference.CreateFromFile(filesList[i]).OpenReadAsync();
Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(random);
Windows.Graphics.Imaging.PixelDataProvider pixelData = await decoder.GetPixelDataAsync();
//Access pixel buffer in such a way
byte[] bytes = pixelData.DetachPixelData();