2017-05-30 6 views
1

Ich versuche, den Bildschirm zu erfassen und dann den Screenshot als base64 Bild auszugeben, aber kann nicht zu einem brauchbaren base64 Bild aus meinem Code zu bekommen.C# unbrauchbar base64 beim Konvertieren von Bitmap

public static Bitmap bitmap; 
    public static string base64; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     CaptureScreen(); 
     Graphics graphics = Graphics.FromImage(bitmap as Image); 
     graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size); 
     pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
     pictureBox1.Image = bitmap; 
     richTextBox1.Text = base64; 
    } 
    public static string CaptureScreen() 
    { 
     bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
     Bitmap bImage = bitmap; 
     System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
     bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
     byte[] byteImage = ms.ToArray(); 
     base64 = Convert.ToBase64String(byteImage); 
     return base64; 
    } 

ich this Ausgang beim Testen und es sollte diese oder in der Nähe zu this Bild anzuzeigen.

+0

Sie kopieren 0 Breite und 0 Höhe...? –

+0

du meinst auf graphics.CopyFromScreen (0, 0, 0, 0, bitmap.Size); Dies dient nur dazu, anzuzeigen, wie das Ergebnis aussehen soll. nur für die Entwicklung –

+0

aber: Sie ordnen eine leere Bitmap zu, schreiben nichts und speichern es dann; Sie sollten ein schwarzes (oder weißes) Rechteck erwarten. Was siehst du? es sieht für mich wie ein schwarzes Rechteck aus ... –

Antwort

1

Das Problem hier ist das Timing.

Sie erstellen die Basis-64 vor kopieren Sie den Bildschirm in das Bild; Sie müssen, um die Linie zu verschieben:

graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size); 

vor die Linie passieren:

bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 

buchstäblich Versuchen Sie es einfach an sich ändernde:

graphics.CopyFromScreen(0, 0, 0, 0, bImage.Size); 
bImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
+0

Vielen Dank Marc! : D –

Verwandte Themen