2012-06-04 17 views
16

Estoy tratando de capturar la pantalla y luego convertirla en una cadena Base64. Este es mi código:Cómo convertir el mapa de bits a una cadena 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); 

El uso de un RichTextbox de depurar, se nota:

BM6 ~

Así que por alguna razón los bytes no son correctas, que hace que el base64String ser nulo ¿Alguna idea de lo que estoy haciendo mal? Gracias.

Respuesta

18

Los caracteres que obtiene al hacer System.Text.Encoding.UTF8.GetString(imageBytes) (casi con seguridad) contienen caracteres no imprimibles. Esto podría hacer que solo veas esos pocos personajes. Si primero convertirlo en una base 64-string, entonces será contener sólo caracteres imprimibles y puede ser mostrado en un cuadro de texto:

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

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

Ah, woops. Gracias Tim :) –

21

encuentro solución para mi problema:

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

No hay necesidad para byte [] ... simplemente convierta la secuencia directamente (con las construcciones)

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 
    } 
} 
Cuestiones relacionadas