画面をキャプチャしてから、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になります。私が間違っていることを知っていますか?ありがとう。
System.Text.Encoding.UTF8.GetString(imageBytes)
を実行することで得られる文字には、(ほぼ確実に)印刷できない文字が含まれます。これにより、これらの少数の文字のみが表示される可能性があります。最初にbase64-stringに変換すると、印刷可能な文字のみが含まれ、テキストボックスに表示できます。
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
// Write the bytes (as a Base64 string) to the textbox
richTextBox1.Text = base64String;
私は私の問題の解決策を見つけました:
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
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
}
}