53

画面をキャプチャして 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 が null になります。私が間違っていることは何か分かりますか?ありがとう。

4

3 に答える 3

68

私の問題の解決策を見つけました:

Bitmap bImage = newImage;  // Your Bitmap Image
System.IO.MemoryStream ms = new MemoryStream();
bImage.Save(ms, ImageFormat.Jpeg);
byte[] byteImage = ms.ToArray();
var SigBase64= Convert.ToBase64String(byteImage); // Get Base64
于 2015-05-05T08:19:00.320 に答える
35

実行して得られる文字に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;
于 2012-06-04T23:38:19.283 に答える
19

必要はありませんbyte[]...ストリームを直接変換するだけです(コンストラクトを使用して)

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
  }
}
于 2017-01-10T20:47:27.960 に答える