Это продолжение ответа на вопрос, который я ранее разместил здесь.
Я поместил предложенный ответ в асинхронную функцию:
public static async Task<int[]> bitmapToIntArray(Image bitmapImage)
{
string fileName = "/Images/flowers.jpg";
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
var pixelData = await decoder.GetPixelDataAsync();
var pixels = pixelData.DetachPixelData();
var width = decoder.OrientedPixelWidth;
var height = decoder.OrientedPixelHeight;
int[] colors = new int[width * height];
for (var i = 0; i < height; i++)
{
for (var j = 0; j < width; j++)
{
byte r = pixels[(i * height + j) * 4 + 0]; //red
byte g = pixels[(i * height + j) * 4 + 1]; //green
byte b = pixels[(i * height + j) * 4 + 2]; //blue (rgba)
colors[i * height + j] = r;
}
}
return colors;
}
Он вызывается из основной функции ниже:
public void ApplyImageFilter(Image userImage, int imageWidth, int imageHeight)
{
...
int[] src = PixelUtils.bitmapToIntArray(userImage).Result;
...
;
}
Однако, когда я вхожу в строку выше, происходит то, что только вторая строка функции bitmapToIntArray:
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
ожидает завершения, а затем возвращается к ApplyImageFilter и выполняет оставшуюся часть этой функции (и выдает ошибку в конце). Он не переходит ни к одной строке после первого ожидания в функции bitmapToIntArray. Я сравнил async/await с предыдущим успешным проектом, и кажется, что оба раза я следовал одной и той же процедуре. Также прочитайте о функциональности async/await и немного поиграйте с кодом, но безуспешно. Я не знаю, что еще я могу попробовать, поэтому любые предложения будут очень признательны.