Как преобразовать битмап в строку Base64? - программирование
Подтвердить что ты не робот

Как преобразовать битмап в строку Base64?

Я пытаюсь захватить экран, а затем преобразовать его в строку Base64. Это мой код:

Rectangle bounds = Screen.GetBounds(Point.Empty);
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);

using (Graphics g = Graphics.FromImage(bitmap))
{
   g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}

// Convert the image to byte[]
System.IO.MemoryStream stream = new System.IO.MemoryStream();
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] imageBytes = stream.ToArray();

// Write the bytes (as a string) to the textbox
richTextBox1.Text = System.Text.Encoding.UTF8.GetString(imageBytes);

// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);

Используя richTextBox для отладки, он показывает:

BM6 ~

Итак, по какой-то причине байты неверны, что приводит к тому, что base64String становится нулевым. Любая идея, что я делаю неправильно? Спасибо.

4b9b3361

Ответ 1

Символы, которые вы получаете, делая System.Text.Encoding.UTF8.GetString(imageBytes), будут (почти наверняка) содержать непечатаемые символы. Это может привести к тому, что вы увидите только несколько символов. Если вы сначала преобразуете его в base64-строку, тогда он будет содержать только печатные символы и может отображаться в текстовом поле:

// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);

// Write the bytes (as a Base64 string) to the textbox
richTextBox1.Text = base64String;

Ответ 2

Я нашел решение для своей проблемы:

Bitmap bImage = newImage;  //Your Bitmap Image
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] byteImage = ms.ToArray();
var SigBase64= Convert.ToBase64String(byteImage); //Get Base64

Ответ 3

Нет необходимости в байте []... просто конвертировать поток напрямую (с использованием конструкций)

using (var ms = new MemoryStream())
{    
  using (var bitmap = new Bitmap(newImage))
  {
    bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    var SigBase64= Convert.ToBase64String(ms.GetBuffer()); //Get Base64
  }
}