Выходные данные, возвращаемые BrowserWindow.CaptureImage
, представляют собой System.Drawing.Image
(тип вашей переменной cml1
), который можно преобразовать в byte[]
, используя описанную технику, например, здесь или лучше сжать изображение до более краткого формата, такого как .PNG
:
public static byte[] ImageToByte(Image img)
{
using (var stream = new MemoryStream())
{
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
return stream.ToArray();
}
}
Кредит: приведенный выше код взят непосредственно из этого Ответа StackOverflow здесь
Получив массив byte[]
, вы можете напрямую загрузить его в свой контейнер Blobstorage
, используя подход, аналогичный тому, который вы пробовали, но с использованием более прямого CloudBlockBlob.UploadFromByteArrayAsync
метода * 1023. *.
public async Task SaveBlob(string containerName, string key, byte[] blobToSave)
{
var blobClient = _storageAccount.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference(containerName);
await blobContainer.CreateIfNotExistsAsync();
var blockBlob = container.GetBlockBlobReference(key);
await blockBlob.UploadFromByteArrayAsync(blobToSave, 0, blobToSave.Length);
}
Где _storageAccount
- это CloudStorageAccount
, проанализированный из строки подключения к учетной записи хранилища Azure, containerName
- это имя контейнера (папки) (в нижнем регистре), key
- это уникальное имя файла для вашего изображения, и курс blobToSave
- это байтовый массив, который вы только что преобразовали.
Замечание по производительности - если вы храните несколько больших двоичных объектов в одной и той же ссылке на контейнер, вам не нужно каждый раз выполнять проверку CreateIfNotExists(Async)
- в идеале, делать однократную проверку во время начальной загрузки, когда ваше приложение или тест запущен.