Отправка изображения в Telegrambot в виде byte []

Есть массив байт описывающий ч-б изображение (qr-код):

Byte[] byteCodes

Как можно отправить изображение из данного байт-кода в телеграм-бот?

Нашел примеры как можно отправить изображение из директории по ссылке, но мне это не подходит у меня в виде байт-кода.

Попробовал преобразовать байт-код в объект Image следующим образом:

public static Image byteArrayToImage(byte[] byteArrayIn)
    {
        using (var ms = new MemoryStream(byteArrayIn))
        {
            return Image.FromStream(ms);
        }
    }

А потом передать его через:

await _telegramBotClient.SendPhotoAsync(message.Chat.Id, QRcodeServices.byteArrayToImage(byteCodes));

Но мне выдает ошибку, что метод SendPhotoAsync принимает другой параметр - InputOnLineFile


Ответы (1 шт):

Автор решения: aepot

InputOnlineFile может отправлять только готовый файл изображения. Не Image, не Bitmap.

// Bitmap bmp = ...
using(var ms = new MemoryStream())
{
    bmp.Save(ms, ImageFormat.Png);
    ms.Position = 0;
    await _telegramBotClient.SendPhotoAsync(message.Chat.Id, new InputOnLineFile(ms, "image.png"));
}

То есть отправляется именно сохраненная в формате изображения картинка, а не что-либо другое.

Если файл в формате png у вас уже в массиве байт, то код будет немного проще.

// byte[] bytes = ...
using(var ms = new MemoryStream(bytes))
{
    await _telegramBotClient.SendPhotoAsync(message.Chat.Id, new InputOnLineFile(ms, "image.png"));
}

Есть и другой конструктор у InputOnLineFile на случай если файл например уже загружен в сети.

new InputOnLineFile("https://site.ru/image.png");

Вместо png может быть jpg или другой формат изображения.

→ Ссылка