Как загрузить файл изображения в Memory Stream и отобразить изображение? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь загрузить файл большого двоичного изображения из моего хранилища Azure в переменную MemoryStream и декодировать его для создания растрового изображения. Однако при декодировании потока изображение не появляется.

Я попытался использовать оператор using с помощью MemoryStream и загрузить файл изображения в переменную потока в операторе using. Я попробовал решения по этим двум ссылкам: Как отобразить изображение BLOB-объекта в Android? и Как загрузить файл BLOB-объекта в поток памяти? . Я вставил контрольные точки для проверки stream, а длина и позиция 2574958, а емкость - 4123264. Итак, я верю, что получаю данные потока обратно.

private async void GetBlob()
{
    List<string> imageNames = SQL.GetImageNames(SelectedRego);

    foreach (string imageName in imageNames)
    {
        using (var stream = new MemoryStream())
        {
            Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob cloudBlockBlob = Blob.DownloadBlob(imageName);
            await cloudBlockBlob.DownloadToStreamAsync(stream);
            ImageView imageView = new ImageView(this);
            imageView.SetImageBitmap(BitmapFactory.DecodeStream(stream));
            FindViewById<LinearLayout>(Resource.Id.maintenance_history_image_linear_layout).AddView(imageView);
            }
        }
    }
}
public static CloudBlockBlob DownloadBlob(string imageName)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudStorageAccountCredentials);
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference("images");
    container.CreateIfNotExistsAsync();
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(imageName);
    return blockBlob;
}

Я ожидаю, что данные потока будут декодированы в объект Bitmap для отображения в моем приложении, как показано imageView.SetImageBitmap(BitmapFactory.DecodeStream(stream));.

...